Как передать значения во вложенный ForEach? - PullRequest
4 голосов
/ 12 марта 2011

Я пытаюсь использовать переменную, созданную во внешнем цикле ForEach внутри внутреннего цикла ForEach. Значение не проходит, как я ожидаю, и всегда равно нулю.

Примечание. Значение $ server всегда равно нулю. Скажите, почему и как это исправить?

$Srvrs = "SVR1";
$Srvrs | ForEach-Object {


    $server = $_;
    Write-Host "Server value in outer Foreach:" $server;

    $sourceFilesLoc = "D:\Test\SetupSoftwareAndFiles"
    $sourceFiles = Get-ChildItem -LiteralPath $sourceFilesLoc;

    $sourceFiles | ForEach-Object  {
        Start-Job -InputObject $server -ScriptBlock     {
            Write-Host "Server value in inner Foreach:" $server;
            }
        }
}

Ответы [ 2 ]

9 голосов
/ 12 марта 2011

Передача параметров через параметр -ArgumentList, например ::100100

Start-Job -InputObject $server -ScriptBlock {param($svr)
    Write-Host "Server value in inner Foreach:" $svr;
} -ArgumentList $server

Вот простой пример использования -ArgumentList:

PS> $server = 'acme'
PS> $job = Start-Job {param($svr) "server is $svr"} -ArgumentList $server
PS> Receive-Job $job
server is acme
2 голосов
/ 12 марта 2011

проблема не в доступе к переменной во вложенных foreach .. если бы вы выполнили запись-запись в переменную во внутреннем foreach, это было бы хорошо. Это вопрос передачи переменной на работу. Задания - это разные процессы, которые выполняются в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...