我必须在多个服务器上停止SQLSERVER服务,同时检查状态以确保它们已停止。 现在我的代码看起来像这样:
$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步骤真的令人毛骨悚然,但不知道如何以其他方式做到这一点 你能建议一种方法我可以重写它来停止服务,等到它停止然后返回状态吗?
由于
答案 0 :(得分:1)
如果您使用ServiceController
class中的Stop
方法,则会有另一种名为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
}