[英]GetNewClosure and Start-Job
我无法理解GetNewClosure如何与Start-Job结合使用。 举例来说,我有以下代码
function Test([string]$Name)
{
$block = { Write-Host "Name = $Name" }.GetNewClosure()
&$block
Other $block
OtherJob $block
}
function Other([scriptblock]$Block)
{
Write-Host -NoNewline "In Other: "
&$Block
}
function OtherJob([scriptblock]$Block)
{
Write-Host -NoNewline "In OtherJob: "
$j = Start-Job -ScriptBLock $Block
Start-Sleep -s 1
$j | Receive-Job
}
调用代码时我得到
PS C:\> Test "foo"
Name = foo
In Other: Name = foo
In OtherJob: Name =
请注意,在$ OtherJob中未捕获$ Name。
它可能与Start-Job启动一个新的PS实例有关,但是有什么解决方法(最好是不包含使用-ArgumentList的方法)?
PS:版本表应该很重要
PS C:\> $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
稍加搜索就可以从
Powershell-如何为Start-Job预先评估脚本块中的变量
基本上你可以使用
$otherBlock = [scriptblock]::Create("Write-Host 'Name = $Name'")
OtherJob $otherBlock
或在-InitializationScript中设置变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.