我已经获得了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&暂停服务,而不是同时重启服务。
有什么想法吗?我可能会遗漏一些完全明显的东西。
答案 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()}