早安的人,
我正在处理一个Do/Until循环,该循环跟踪针对多个服务器的invoke-command作业。我不知道如何在Until块中捕获的是继续执行循环,直到所有服务器都报告了Completed状态。
下面是我的测试代码
Invoke-Command -ComputerName Server01,Server02,Server03 -ScriptBlock{sleep -s 120} -AsJob -JobName "Test Job"
Do{
Write-Host "Job is still running"
sleep -s 10
}Until((Get-Job "Test Job").state -eq "Completed"我在想,我需要把下面的内容放在“直到”块中,但我不确定
Until(ForEach($job in (Get-Job "Test Job")){
$Job.State -eq "Completed"
})发布于 2022-10-12 16:22:37
我目前还没有办法测试这个,但是如果你想要的是一个进度输出,我不明白为什么这个结果不能工作。
$jobs = Invoke-Command -ComputerName Server01,Server02,Server03 -ScriptBlock{sleep -s 120} -AsJob
do {
foreach ($job in ($jobs.ChildJobs | ? 'State' -EQ 'Running')
{
Write-Host -Object (
"Job {0} is still running on computer {1}." -f $job.Name, $job.Location
)
}
Start-Sleep -Seconds 1
} until ($jobs.ChildJobs.State -notcontains 'Running')如前所述,我没有办法测试这一点,也不记得您从父作业中获得的State属性是否考虑到了运行的子作业。从技术上讲,你所尝试的也是一样的,因为它有结束括号。
Do{
Write-Host "Job is still running"
sleep -s 10
}Until((Get-Job "Test Job").state -eq "Completed")我没有解释您可能遇到的每一个问题,但您可能担心的一件事是, state 属性可能并不总是处于“已完成”或“运行”状态。这可能导致对“已完成”状态的无限期循环测试。
https://stackoverflow.com/questions/74043002
复制相似问题