Iva*_*van 17 powershell jobs background start-job scriptblock
我想在Powershell中使用后台作业.
如何在ScriptBlock定义时评估变量?
$v1 = "123"
$v2 = "asdf"
$sb = {
Write-Host "Values are: $v1, $v2"
}
$job = Start-Job -ScriptBlock $sb
$job | Wait-Job | Receive-Job
$job | Remove-Job
Run Code Online (Sandbox Code Playgroud)
我得到$ v1和$ v2的空值.如何让它们在(通过)脚本块中进行评估,从而对后台作业进行评估?
mjo*_*nor 32
一种方法是使用[scriptblock] :: create方法使用局部变量从可扩展的字符串创建脚本块:
$v1 = "123"
$v2 = "asdf"
$sb = [scriptblock]::Create("Write-Host 'Values are: $v1, $v2'")
$job = Start-Job -ScriptBlock $sb
Run Code Online (Sandbox Code Playgroud)
另一种方法是在InitializationScript中设置变量:
$Init_Script = {
$v1 = "123"
$v2 = "asdf"
}
$sb = {
Write-Host "Values are: $v1, $v2"
}
$job = Start-Job -InitializationScript $Init_Script -ScriptBlock $sb
Run Code Online (Sandbox Code Playgroud)
第三种选择是使用-Argumentlist参数:
$v1 = "123"
$v2 = "asdf"
$sb = {
Write-Host "Values are: $($args[0]), $($args[1])"
}
$job = Start-Job -ScriptBlock $sb -ArgumentList $v1,$v2
Run Code Online (Sandbox Code Playgroud)
Jas*_*irk 17
最简单的解决方案(需要V3或更高版本)如下所示:
$v1 = "123"
$v2 = "asdf"
$sb = {
Write-Host "Values are: $using:v1, $using:v2"
}
$job = Start-Job -ScriptBlock $sb
Run Code Online (Sandbox Code Playgroud)
你可以认为$ using大致像一个显式的param()块并且传递-ArgumentList,只有PowerShell会自动为你处理.
| 归档时间: |
|
| 查看次数: |
18980 次 |
| 最近记录: |