我正在尝试创建一个执行脚本块的后台作业。我需要将此脚本块作为参数传递,但我似乎无法使语法正常工作。脚本块正在沿途某处转换为字符串。
当我将脚本块传递给本地函数时它工作正常,但不是通过 start-job
以下语法有效:
function LocalFunction
{
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
LocalFunction -ScriptBlock { echo "hello" }
这会按预期输出“打招呼”。
但以下失败:
$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 大师都知道如何使这种语法起作用吗?
提前致谢,
本