繁体   English   中英

GetNewClosure和开始工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM