2017-01-13 4 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 
} 

WAITステップは本当に不気味ですが、それを他の方法 を行うにはどのようには思いもしませんでした私はまで待つ、サービスを停止するためにそれを書き換えることができ方法を提案でした停止してから状態を返しますか?

おかげ

答えて

1

あなたはWaitForStatusと呼ばれる別の方法があるServiceControllerclassからStop方法を使用している場合。 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 
} 
関連する問題