Подождите .. пока в ForEach - PullRequest
       1

Подождите .. пока в ForEach

0 голосов
/ 28 сентября 2018

У меня есть сценарий, в котором мне нужно подождать в цикле ForEach перед выполнением команды.

$classList = Get-ClassList
forEach ($class in $classList) {
    $studentList = Get-StudentList -class $class.Name
    forEach ($student in $studentList) {
        Write-Host $student.Name
        $rollCall = Roll-Call -student $student.Name
    }
}

Вещь, которую я хочу решить, - подождать, пока ученик перекатится.Когда он уже объявлен по перекличке, мне нужно получить его вывод (просто информацию по перекличке) следующим образом:

$update = Get-RollCallOutput-student $student.Name -class $class.Name

перекличка каждого студента может варьироваться.Кроме того, выход имеет тип String.Object[].Тем не менее, чтобы получить конкретный вывод, мне нужно зациклить Обновление Roll-Call.

forEach ($output in $update) {
   Get-Output -outputID $output.Id -student $student.Name
}

По замыслу, если перекличка студента завершена, Get-RollCallOutput не вернет Нулевой .В противном случае это ноль.Тем не менее, чтобы дождаться, пока вывод NOT будет NULL, я использовал While($job)

$update = Get-RollCallOutput-student $student.Name -class $class.Name
while($job)
forEach ($output in $update) {
   Get-Output -outputID $output.Id -student $student.Name
}

Проблема заключается в том, что он находится внутри вложенного ForEach, который всегда висит.В настоящее время обходной путь должен использовать Start-Sleep -s 15, чтобы дождаться выполнения переклички, прежде чем скрипт перейдет к запросу на вывод.Я знаю, что это не очень хорошее решение и действительно влияет на производительность.Тем не менее, при поиске лучшего способа это было бы приемлемо.

[ Обновлено ] Даже использовать Do ... While, но не работает.Я всегда вижу, как он завис после команды Roll-Call.

Do {
   $update = Get-RollCallOutput-student $student.Name -class $class.Name
}

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