2016-07-20 73 views
4

我想知道是否有人可以幫我解決這個問題。我有這樣的語句來停止服務,但有時服務有時不能因依賴停止,所以我增加了一個啓動睡眠-s 5.PowerShell - 在while循環中添加計數器

while($module | Get-Service | ? {$_.Status -eq "Running" -or $_.Status -eq "Stopping"}) 
{ 
    set-service $module -ComputerName $targetserver -StartupType Disabled -Status Stopped -PassThru 
     ; 
    Start-Sleep -Seconds 5 #keep repeating stop services every 5 seconds until all services have stopped 
} 

我想添加一個計數器後停止循環60秒,如果服務仍在運行,然後到write-host r n "Service not stopped."

任何幫助表示讚賞。謝謝大家。

+1

時間拿出你的[秒錶(或其他類似的內置功能)](HTTP://計算器.com/questions/3513650/timing-a-commands-execution-in-powershell) – gravity

回答

4

60/5 = 12個循環。

while (test -and ($counter++ -lt 12)) { 
    #stop-service 
    #start-sleep 
} 

但與長時間的測試,它可能是更具可讀性爲:

do 
{ 
    set-service $module -ComputerName $targetserver -StartupType Disabled -Status Stopped -PassThru 
    Start-Sleep -Seconds 5 

    $status = ($module | Get-Service).Status 
    $loopCounter++ 

} while ($status -in ('Running', 'Stopping') -and ($loopCounter -lt 12)) 
+0

這正是我所需要的。非常感謝! – Mike