Как передать переменную по ссылке в Start-Job? - PullRequest
0 голосов
/ 24 октября 2018

Как изменить переменную в 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)?

1 Ответ

0 голосов
/ 24 октября 2018

Вы совершенно не в поле зрения при изменении чего-либо внутри работы.Ничто не будет просто волшебным образом заполняться в текущем сеансе.

Вы можете сделать что-то вроде этого:

$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
...