2017-12-12 4 views
0

私はインベントリ内のすべてのホスト/ VMの再起動について考えています。 私はホストを1つずつ再起動する短いスクリプトを作成しました。 しかし、それは長い時間がかかります。どのように私はすべてのホストを同時に再起動することができますか?同時にすべてのホストでコンピュータを再起動

マイコード:

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

ごくわずかなホスト数を持たない限り、すべてのコンピュータ(仮想または物理)を同時に再起動しないことを間違いないでしょう。それは、ホストオペレーティングシステムや電源に大きな負担をかけることになります。最良の方法は、[ジョブキュー](https://stackoverflow.com/a/18193195/1630171)を介してバッチでシステムを再起動することです。 –

答えて

0

が、それは良いアイデアです? - Restart-Computer -asJob それとももっと良い解決策ですか?

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

なぜ仕事はより良い解決策ですか?彼はパラレルなソリューションを探していますか? –

+1

@RanadipDutta:あなたが質問を読んでいれば、間違いなくそのように聞こえます。 – Joey

+0

私の悪い。あなたが正しいです。私は、すべてのサーバーにstart-processを使用する方が好きです。 –

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のリンクをご覧ください。

2

Restart-Computerは、ComputerNameの複数のエントリを受け入れますので、一度に複数のホストで再起動できます。

これを使用すると、一度に3つずつ、再起動をバッチで開始することができます。これにより、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) 

注:あなたが生きてスクリプトを実行する準備ができたら場所Restart-Computerにこれで、-WhatIfを削除するには、ちょうどそれがどうなるのかを知らせると、実際に再起動を行わないでコンソールに書き込みます。

関連する問題