powershell远程停止服务

时间:2017-01-13 14:34:27

标签: powershell

我必须在多个服务器上停止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步骤真的令人毛骨悚然,但不知道如何以其他方式做到这一点 你能建议一种方法我可以重写它来停止服务,等到它停止然后返回状态吗?

由于

1 个答案:

答案 0 :(得分:1)

如果您使用ServiceControllerclass中的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 
}