Как использовать start-job в powershell в цикле foreach? - PullRequest
0 голосов
/ 28 октября 2019

На данный момент я закомментировал код, который не работает, и я могу без проблем выполнить его в одном потоке. Моя цель - запустить четыре задания (по одному для каждой папки, которые мне нужно скопировать с помощью robocopy), а затем дождаться их завершения.

Я пробовал командлет start-job в нескольких разных местах, чтобыУдачиНа самом деле он запускает четыре задания, но они заканчиваются так же быстро, как и начинаются, и файл журнала не создается.

1 Ответ

0 голосов
/ 28 октября 2019

Задания выполняются в другой области, поэтому переменные из блока скриптов недоступны. Вы можете использовать модификаторы области или передавать переменные в качестве параметров.

Здесь блок сценария задания определяется отдельно, а не в соответствии с начальным заданием - это помогает с удобочитаемостью:

$RobocopyScriptBlock= {
  param($src,$dest)
  #your code
}

Затем запустите его:

Start-Job -ScriptBlock $RobocopyScriptBlock -ArgumentList $source_folder,$destination -Name 'jobname'

Вы не сделалине публиковать часть, когда вы проверяете свои работы после их запуска. Если вы этого не сделаете, задания не будут возвращать результаты и ошибки сами по себе, и вы даже не увидите, что не так. Подробнее о командлетах Receive-Job, Get-Job и Remove-Job.

...