私は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' に引数を検証することはできません。 引数がnullです。ヌル以外の引数を指定して、 コマンドを再度実行してください。
引数を持つローカル関数である-ScriptBlock
でInvoke-Commandを使用するにはどうすればよいですか?
大規模なコードブロックで関数とパラメータ全体をラップすることができることはわかっていますが、これはきれいな方法ではありません。
ありがとう、完璧に動作します!私は運がないparam()+ -Argumentsのコンボを使いこなしていました。 –
はこのソリューションを見つけるのに数時間かかりました; セッションのエクスポート/インポートよりもずっと優れています ありがとうございました! – icnivad
正しいフォーマットは '-ScriptBlock {$ function:Foo}'( '$'の位置に注意してください)としてください。 – Mourndark