【发布时间】:2012-08-07 10:54:04
【问题描述】:
我正在尝试创建一个执行脚本块的后台作业。我需要将此脚本块作为参数传递,但我似乎无法使语法正常工作。脚本块正在一路转换为字符串。
当我将脚本块传递给本地函数时它工作正常,但不是通过 start-job
以下语法有效:
function LocalFunction
{
param (
[parameter(Mandatory=$true)]
[ScriptBlock]$ScriptBlock
)
&$ScriptBlock | % { echo "got $_" }
}
LocalFunction -ScriptBlock { echo "hello" }
这会按预期输出“got 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 大师都知道如何使这种语法起作用吗?
提前致谢,
本
【问题讨论】:
-
我在使用
psake时遇到了同样的问题。我创建了一个前提条件$prec = { ... },并尝试将同样的前提条件传递给各种任务。我得到与您相同的错误。如果您找到解决方案,请告诉我..
标签: powershell