【问题标题】:powershell script restart services on 100s computerspowershell 脚本在 100 台计算机上重新启动服务
【发布时间】: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 我不知道,谢谢。

标签: powershell powershell-remoting


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2019-11-27
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多