我正在使用 PowerShell 3 并使用 Workflows,我遇到了一些奇怪的事情。我正在使用inlinescript块保存一些代码来表示我想要运行许多实例的任务。我发现在这个inlinescript块中声明的变量可以跨并行实例访问。
我的示例中的并行进程休眠了随机毫秒数,但您可以从控制台输出中看到多个并发进程可能休眠相同的毫秒数。当然,这是可能的,但很明显数据不是线程安全的。
workflow Invoke-ForEachParallel
{
param([string[]]$Computers)
foreach -parallel($PC in $Computers)
{
inlinescript {
"Executing on $using:PC"
[int]$i = get-random -min 200 -max 3000
"`t$using:PC - Sleeping for $i milliseconds."
start-sleep -Milliseconds $i
"`tFinished processing on $using:PC"
}
}
}
cls
Invoke-ForEachParallel (1..50)
所以,问题是:我怎样才能确保每个并发进程都在使用自己的变量实例?