停止&使用Set-Service远程重新启动服务

时间:2015-07-31 15:26:41

标签: powershell service

我已经获得了10-15个服务的列表,我经常需要在6台服务器上重启。我有一个调用服务列表的脚本,然后调用服务器列表,然后停止所有服务:

$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只能使用Stop,Start&暂停服务,而不是同时重启服务。

有什么想法吗?我可能会遗漏一些完全明显的东西。

3 个答案:

答案 0 :(得分:7)

要重新启动服务,只需使用Restart-Service

?:

由于根据评论,PowerShell v6已从$Services = Get-Content -Path "C:\Powershell\Services.txt" $Machines = Get-Content -Path "C:\Powershell\Machines.txt" Get-Service -Name $Services -ComputerName $Machines | Restart-Service cmdlet中删除了对远程访问的支持,因此在运行v6或更新版本时需要求助*-Service进行远程执行:

Invoke-Command

答案 1 :(得分:2)

我和Ansgar在一起,这应该可行

$Services = Get-Content -Path "C:\Powershell\Services.txt"
$Machines = Get-Content -Path "C:\Powershell\Machines.txt"
foreach ($service in $services){
    foreach ($computer in $Machines){
    Invoke-Command -ComputerName $computer -ScriptBlock{
    Restart-Service -DisplayName $service}
    }
}

它有点乱,但应该给你一个起点

抱歉,我忘了花些时间来解释发生了什么,所以你导入了每个txt文档,然后它将处理每个服务和每台计算机并重新启动服务。

答案 2 :(得分:0)

你可以尝试这个单线程命令:

Get-Content .\services.txt | %{Get-WmiObject -Class Win32_Service -ComputerName (Get-Content .\computers.txt) -Filter "Name='$_'"} | %{$_.StopService()}; Get-Content .\services.txt | %{Get-WmiObject -Class Win32_Service -ComputerName (Get-Content .\computers.txt) -Filter "Name='$_'"} | %{$_.StartService()}