Использование Invoke-Command -ScriptBlock для функции с аргументами

Я пишу сценарий PowerShell, который будет выполнять команды на удаленном хосте, используя Invoke-Command и его параметр -ScriptBlock . Например,

function Foo {
    ...
    return "foo"
}
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo}

Это нормально работает. Сейчас я хочу сделать то же самое, но вызвать функцию с локальными аргументами. Например,

function Bar {
    param( [String] $a, [Int] $b )
    ...
    return "foo"
}
[String] $x = "abc"
[Int] $y = 123
$rv = Invoke-Command --Credential $c --ComputerName $fqdn -ScriptBlock ${function:Foo($x,$y)}

Но это не работает:

Invoke-Command: Невозможно проверить аргумент для параметра 'ScriptBlock'. Аргумент равен нулю. Укажите ненулевой аргумент и попробуйте команду опять таки.

Как я могу использовать Invoke-Command с -ScriptBlock , который является локальной функцией с аргументами?

Я понимаю, что могу обернуть всю функцию и параметры в большой блок кода, но на мой взгляд, это не чистый способ сделать это.

28
задан Peter Mortensen 23 January 2015 в 12:52
поделиться