尝试编码一个带有参数和参数列表的ScriptBlock的函数,编辑该脚本block,然后运行Invoke-Command



我正在编辑一个函数,它将直接在VM上调用命令。我不断遇到的问题是,如果有人将函数声明作为脚本键传递,我会在调用CREATE时会出现错误,因为params()不在ScriptBlock的顶部。

试图弄清楚我仍然可以首先set-fulllanguage,然后用参数执行一个函数。

function Invoke-DirectOnVM
{
    [CmdletBinding()]
    Param (
    [Parameter(Mandatory = $true)]
    [CloudEngine.Configurations.EceInterfaceParameters]
    $Parameters,
    [Parameter(Mandatory = $true)]
    [String[]]$VMNames,
    [Parameter(Mandatory = $true)]
    [Object]$VMCredential,
    [Parameter(Mandatory = $true)]
    [ScriptBlock]$ScriptBlock,
    [Object[]]$ArgumentList = $null
)
{
    Invoke-Command -VMName $localVMs -Credential $using:VMCredential -ScriptBlock ([ScriptBlock]::Create($("Import-Module OpenUpSession; Set-FullLanguage; `r`n" + $using:ScriptBlock)))
}

从ScriptBlock中删除$using:,它应该正常工作。我自由清理了代码。结果看起来像:

function Invoke-DirectOnVM
{
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory)]
        [CloudEngine.Configurations.EceInterfaceParameters]
            $Parameters,
        [Parameter(Mandatory)]
        [String[]]
            $VMNames,
        [Parameter(Mandatory)]
            $VMCredential,
        [Parameter(Mandatory)]
        [ScriptBlock]
            $ScriptBlock,
        [Parameter()]
        [Object[]]
            $ArgumentList = $null
    )
    $PSBoundParameters.Remove("ScriptBlock")
    Invoke-Command @PSBoundParameters -ScriptBlock ([ScriptBlock]::Create( "Import-Module OpenUpSession; Set-FullLanguage; `r`n" + $ScriptBlock ))
}

相关内容

  • 没有找到相关文章

最新更新