powershell 脚本在 100 台计算机上重新启动服务
Posted
技术标签:
【中文标题】powershell 脚本在 100 台计算机上重新启动服务【英文标题】:powershell script restart services on 100s computers 【发布时间】:2021-11-19 15:14:58 【问题描述】:我需要重新启动数百个服务,这取决于远程计算机上的备份作业是否失败
$services = "winmgmt", "cryptsvc", "vss"
$computers = get-content "$env:\userprofile\servers.txt"
foreach ($srv in $ computers)
get-service -computername $srv $services | restart-service -force
虽然这可行,但它不会异步执行,一次只能执行一个,有没有办法可以一次将作业发送到所有机器?
【问题讨论】:
invoke-command comp1,comp2,comp3 并行运行。 @js2010 我不知道,谢谢。 【参考方案1】:您可以使用 Invoke-Command 将命令作为作业运行,然后您可以等待所有作业完成,这样应该可以做到。
$computers = get-content "$env:\userprofile\servers.txt"
$sb =
$services = "winmgmt", "cryptsvc", "vss"
get-service -Name $services | Restart-Service -PassThru | Get-Service
Invoke-Command -ComputerName $computers -ScriptBlock $sb
【讨论】:
不错。Invoke-Command
也同时接受多个计算机名称,所以你可以这样做 Invoke-Command -ComputerName $computers -ScriptBlock $sb -AsJob |Wait-Job |Receive-Job
更好,感谢@MathiasR.Jessen 我已经更新了
谢谢。有没有办法验证服务是否重新启动?
您可以将 Restart-Service 与 Passthru 一起使用并将其通过管道传回 get-service 以确保服务再次运行(Restart-Service -PassThru | Get-Service)
Invoke-Command -ComputerName $computers -ScriptBlock $sb -AsJob |Wait-Job |Receive-Job ..... receive-job 有什么作用?【参考方案2】:
invoke-command 并行运行演示:
# elevated prompt
measure-command
invoke-command localhost,localhost,localhost sleep 5 |
% seconds
5
【讨论】:
以上是关于powershell 脚本在 100 台计算机上重新启动服务的主要内容,如果未能解决你的问题,请参考以下文章