提问人:yO_ 提问时间:10/24/2018 最后编辑:alexyO_ 更新时间:8/19/2019 访问量:1125
如何在 Start-Job 中通过引用传递变量?
How do you pass a variable by reference within Start-Job?
问:
你如何修改其中的变量?这段代码输出,似乎是因为变量是按值传递的:Start-Job
0
$vara = "0"
$j = start-job -ScriptBlock {
$args[0] = "1"
} -ArgumentList $vara
wait-job $j > $null
receive-job $j
Write-Host $vara ## => "0"
如何通过引用传递参数(因此输出)?1
答:
4赞
Jacob Colvin
10/24/2018
#1
在修改作业中的任何内容时,您完全超出了范围。没有什么会神奇地填充到您当前的会话中。
你可以做这样的事情:
$vara = "0"
$j = start-job -ScriptBlock {
"1"
} -ArgumentList $vara
wait-job $j > $null
$vara = receive-job $j
Write-Host $vara
如果你需要填充很多参数,你可以做这样的事情:
$vara = "0"
$j = start-job -ScriptBlock {
[pscustomobject]@{
vara1 = "1"
vara2 = "0"
}
} -ArgumentList $vara
wait-job $j > $null
$vara = receive-job $j
Write-Host $vara.vara1
评论
0赞
yO_
10/24/2018
这是一个很好的解决方法。+1 但是这种只使用返回值的技巧,对于作业中的复杂算法来说可能不太有用。或者用于并行性和在作业结束前修改值。没有通过参考机制吗?
0赞
Jacob Colvin
10/24/2018
好吧,您可以使用范围,但不能设置这些变量。通常,您应该始终使用我的方法 2 组装输出。无论如何,这只是最佳实践。$using:
评论