整個下午,
我有一個通過 Cimsessions 在一些遠程計算機上運行計劃任務的腳本。
Start-ScheduledTask -CimSession $CimSessions -TaskName "<Task-Name>"
然后我有一個Do/Until回圈運行的計時器,直到任務完成。但是,當一臺服務器完成任務時,即使其他服務器已經完成,回圈也會結束。有沒有辦法我可以重寫我的回圈以繼續,直到所有服務器都注冊他們的任務是not running
$StartTime = Get-Date
Do{
$ElapsedTime = (Get-Date) - $StartTime
$TotalTime = "{0:HH:mm:ss}" -f ([datetime]$ElapsedTime.Ticks)
$CurrentLine = $host.UI.RawUI.CursorPosition
Write-Output "Running Scheduled Task... [Total Elapsed Time: $(stc $TotalTime yellow)]"
sleep -s 2
$host.UI.RawUI.CursorPosition = $CurrentLine
}Until((Get-ScheduledTask -CimSession $CimSessions -TaskName "<Task-Name").State -ne 'Running')
注意:這行代碼$(stc $TotalTime yellow)只是一個自定義函式,可以將文本顏色更改為黃色
uj5u.com熱心網友回復:
條件:
Until((Get-ScheduledTask -CimSession $CimSessions -TaskName "<Task-Name>").State -ne 'Running')
是說,“運行此回圈并在有一個State屬性不等于Running的物件時立即停止”。你想要的是,“當有State屬性等于Running”的物件時運行這個回圈,因此條件應該是:
# with `-contains`
while((Get-ScheduledTask -CimSession $CimSessions -TaskName "<Task-Name>").State -contains 'Running')
# with `-in`
while('Running' -in (Get-ScheduledTask -CimSession $CimSessions -TaskName "<Task-Name>").State)
$ElapsedTime = (Get-Date) - $StartTime順便說一句,您可以通過利用StopWatchClass大大簡化任務。這是一個小例子:
$timer = [System.Diagnostics.Stopwatch]::StartNew()
do {
$timer.Elapsed.ToString('hh\:mm\:ss')
Start-Sleep 1
} until($timer.Elapsed.Seconds -ge 5)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/517636.html
上一篇:onClick={function},onClick={()=>function},onClick={function()}&onClick={()=>function()}有什么區別?[
下一篇:對元組的單個元素應用函式
