同时在所有主机上重新启动计算机

时间:2017-12-12 10:31:27

标签: powershell

我知道如何重新启动广告资源中的所有主机/虚拟机。 我创建了一个简短的脚本,逐个重新启动主机。 但这需要很长时间。如何才能同时重启所有主机?

我的代码:

foreach ($host in $hosts) {
    Restart-Computer -ComputerName $host -Wait
    Write-Host "$host restarted "
}

3 个答案:

答案 0 :(得分:2)

Restart-Computer将接受ComputerName的多个条目,因此您可以一次在多个主机上执行重新启动。

使用此方法,您可以批量启动重启,例如一次启动三次,这将显着减少不占用VM群集/主机上的过多负载所需的时间。

$hosts = @("server01","server02","server03","server04","server05","server06","server07","server08","server09","server10")

[int]$batches = 3 #number of computers to restart in each 'batch'
[int]$skip = 0

do {
    $selected_hosts = $hosts | Select-Object -First $batches -Skip $skip

    Restart-Computer -ComputerName $selected_hosts -Wait -WhatIf
    Write-Host "$selected_hosts restarted"

    $skip = $skip + $batches
}
while ($selected_hosts)

注意:当您准备好运行脚本时,请删除-WhatIf,这样就可以了Restart-Computer只会写入控制台,告知您它将执行的操作,而不是实际执行重新启动。< / p>

答案 1 :(得分:0)

这是个好主意吗? - Restart-Computer -asJob 或许是更好的解决方案??

$j = Restart-Computer -ComputerName "Server01", "Server02" -AsJob
PS C:\> $Results = $j | Receive-Job
PS C:\> $Results

答案 2 :(得分:0)

您可以尝试WMI重启服务器吗?我在social.technet.microsoft论坛上找到了一种这样的方法。

$server = get-content c:\Servers.txt

(gwmi -Class Win32_OperatingSystem -ComputerName $server).Win32Shutdown(6)
If ($?) {
Write-Host "$server successfully rebooted"
}Else{
Write-Host "Could not reboot $server"
}

您还可以找到其他方法,例如使用批处理文件。查看this链接。