Пытаясь закодировать функцию, которая принимает блок сценариев со списком параметров и параметров, редактирует этот блок сценариев и затем запускает команду invoke-command - PullRequest
0 голосов
/ 26 апреля 2018

Я редактирую функцию, которая будет вызывать команду непосредственно на ВМ. Проблема, с которой я продолжаю сталкиваться, заключается в том, что если кто-то передает объявление функции в виде блока сценария, я получаю сообщение об ошибке при вызове команды create, поскольку params() находится не в верхней части блока сценария.

Попытка выяснить, как я все еще могу set-fulllanguage сначала выполнить функцию с params.

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)))
}

1 Ответ

0 голосов
/ 27 апреля 2018

Удалите $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 ))
}
...