スクリプトブロックを実行するバックグラウンドジョブを作成しようとしています。このスクリプトブロックをパラメーターとして渡す必要がありますが、構文を機能させることができないようです。スクリプトブロックは途中で文字列に変換されています。
スクリプトブロックをローカル関数に渡すと正常に機能しますが、start-jobでは機能しません
次の構文が機能します。
function LocalFunction
{
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
LocalFunction -ScriptBlock { echo "hello" }
これにより、期待どおりに「gothello」が出力されます。
しかし、以下は失敗します:
$job = start-job -argumentlist { echo "hello" } -scriptblock {
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
start-sleep -s 1
receive-job $job
返されるエラーは
Receive-Job : Cannot process argument transformation on parameter 'ScriptBlock'. Cannot convert the " echo "hello" " value of type "System.String" to type "System.Management.Automation.ScriptBlock".
したがって、エラーを正しく読んでいると、-argumentlistが何らかの形で引数を文字列に強制しているように見えます。
この構文を機能させる方法を知っているPowerShellの達人はいますか?
前もって感謝します、
ベン