我列出了通常需要在6台服务器上重新启动的10到15个服务。我有一个脚本,该脚本调用服务列表,然后调用服务器列表,然后停止所有服务:
$Services = Get-Content -Path "C:\Powershell\Services.txt"
$Machines = Get-Content -Path "C:\Powershell\Machines.txt"
Get-Service -Name $Services -ComputerName $Machines | Set-Service -Status Stopped
然后,我还有另一个单独的脚本来重新启动它们:
$Services = Get-Content -Path "C:\Powershell\Services.txt"
$Machines = Get-Content -Path "C:\Powershell\Machines.txt"
Get-Service -Name $Services -ComputerName $Machines | Set-Service -Status Running
我检查了一下,似乎找不到一种将其放入单个脚本的方法。据我了解,Set-Service仅具有停止,启动和暂停服务的功能,而不能同时重新启动它们。
有任何想法吗?我可能会错过一些完全显而易见的东西。
最佳答案
要重新启动服务,只需使用 Restart-Service
:
$Services = Get-Content -Path "C:\Powershell\Services.txt"
$Machines = Get-Content -Path "C:\Powershell\Machines.txt"
Get-Service -Name $Services -ComputerName $Machines | Restart-Service
由于根据注释,PowerShell v6已从
*-Service
cmdlet中删除了对远程访问的支持,因此在运行v6或更高版本时,需要诉诸Invoke-Command
进行远程执行,如下所示:Invoke-Command -Computer $Machines -ScriptBlock {
Get-Service -Name $using:Services -ErrorAction SilentlyContinue |
Restart-Service
}
或像这样:
Invoke-Command -Computer $Machines -ScriptBlock {
Restart-Service $using:Services -ErrorAction SilentlyContinue
}
另一个选择是WMI:
$fltr = ($Services | ForEach-Object { 'Name="{0}"' -f $_ }) -join ' or '
Get-WmiObject Win32_Service -Computer $Machines -Filter $fltr | ForEach-Object {
$_.StopService()
$_.StartService()
}
关于powershell - 使用Set-Service远程停止和重新启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31749844/