我有一种情况,我需要在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) {...}