2017-01-13 111 views
0

我必須停止在多個服務器上,並在同一時間檢查狀態SQLSERVER服務,以確保他們停止。 現在我的代碼如下所示:PowerShell的一站式服務遠程

$vmlist = Get-Content C:\xx.txt 
foreach($VM in $VMlist) 
{ 
    Get-Service -ComputerName $VM | Where-Object -FilterScript {$_.name -match 「MSSQLSERVER」} | ForEach-Object {$_.stop()} 
    Start-Sleep 5 
    Get-Service -ComputerName $VM | Where-Object -FilterScript {$_.Name -like 「MSSQLSERVER「} | Select-Object -Property machineName,name,Displayname,status 
} 

等待步驟是實在太離奇了,但不知道該怎麼做,你能不能提出一個方法,我可以把它改寫,以停止服務等方式 ,等到它被停止,然後返回狀態?

感謝

回答

1

如果您正在使用從ServiceControllerclassStop方法還有一種叫WaitForStatus方法。 2.參數超載是安全的,因爲你可以將特定的超時,這樣你的腳本不掛起,如果該服務從未停止。

$vmlist = Get-Content C:\xx.txt 
foreach($VM in $VMlist) { 
    Get-Service -ComputerName $VM | 
    ? { $_.Name -match 「MSSQLSERVER」 } | % { 
     $_.Stop() 
     $_.WaitForStatus('Stopped','00:00:05') 
    } 
    Get-Service -ComputerName $VM | 
    ? { $_.Name -like 「MSSQLSERVER「 } | 
    Select machineName, name, Displayname, status 
}