等待..直到ForEach

时间:2018-09-27 22:59:15

标签: powershell

我有一种情况,我需要在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[]类型。就是说,要获得特定的输出,我需要循环点名更新。

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

根据设计,如果学生的唱名已经完成,则Get-RollCallOutput将不会返回 Null 。否则为null。就是说,为了等待输出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) {...}

0 个答案:

没有答案