У меня возникли проблемы с пониманием того, как GetNewClosure работает в сочетании с Start-Job. Дело в точке У меня есть следующий кодGetNewClosure and 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.
Возможно, это связано с началом работы с новым экземпляром 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