リモートのWindowsをコマンドで(一括)再起動、シャットダウンする方法

リモートのWindowsをコマンドで(一括)再起動、シャットダウンする方法

自宅や会社などのローカルネットワーク環境で、手元にないWindowsマシンを再起動したりシャットダウンしたい場合、リモートデスクトップ接続して操作する方法が思い浮かびますが、作業台数が多くなると、一台ずつ接続して作業するのは結構面倒な作業です。

そのようなときにおすすめの方法が、リモートのWindowsマシンをコマンドで再起動/シャットダウンする方法です。

そこでここでは、PowerShellコマンドレット「Restart-Computer」「Stop-Computer」を使って、リモートのWindowsマシンを再起動/シャットダウンする方法を紹介します。

事前設定

PowerShellコマンドレット「Restart-Computer」「Stop-Computer」を使って、リモートのWindowsマシンを再起動/シャットダウンする場合は、リモートのWindowマシン側で「ファイアウォールの通信許可」と「UACのリモート制限の無効化(ワークグループ環境のみ必要)」設定が必要になります。

ファイアウォールの通信許可

Windows 10に標準搭載の「Windows Defender ファイアウォール」を利用している場合は、「RPC動的ポート」の受信を許可しておきます。

受信の規則は、管理者権限でPowrShellを起動して、以下のコマンドを実行して追加できます。

PS C:\> New-NetFirewallRule -DisplayName "@RPC-enable" -Program "%SystemRoot%\System32\svchost.exe" -Profile Private -Direction Inbound -Protocol TCP -LocalPort RPC -Action Allow

UACのリモート制限の無効化

ワークグループ環境の場合は「UACのリモート制限」を無効化しておく必要があります。

UACのリモート制限を無効化するには、管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行します。

C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1

なお、コマンドは即時で反映されます。

参考:ユーザー アカウント制御とリモート制限 - Windows Server | Microsoft Docs

リモートマシンをシャットダウン/再起動する

たとえば、リモートのWindows 10マシン「PC-002」をシャットダウンしたいときは、以下のようにコマンドを実行します。

PS C:\> Stop-Computer -ComputerName PC-002

再起動させたいときは、以下のようにコマンドを実行します。

PS C:\> Restart-Computer -ComputerName PC-002

「-Force」オプションを付加すると、リモートマシンにサインインしているユーザーがいたり、何かアプリケーションを開いて作業している場合でも、強制的にシャットダウン/再起動できます。

PS C:\> Restart-Computer -ComputerName PC-002 -Force

複数台のマシンを一括でシャットダウン/再起動したいときは「-ComputerName」オプションで、対象となるマシンをカンマ区切りで複数指定できます。

PS C:\> Stop-Computer -ComputerName PC-002,PC-003,PC-004 -Force

なお、上のコマンドではリモートマシンをコンピューター名で指定していますが、IPアドレスで指定することもできます。

資格情報

リモートマシンに対してPowerShellコマンドレットを実行する場合は、リモートマシンにサインインできるユーザーの資格情報が必要になります。

ドメイン環境なら、ドメインユーザーでサインインしていれば資格情報を指定しなくてもコマンドを実行できますが、ワークグループ環境の場合は「-Credential」オプションで、リモートマシンにサインインできるユーザーの資格情報を指定する必要があり、以下のようにコマンドを実行します。

PS C:\> Stop-Computer -ComputerName <リモートコンピューター名> -Force -Credential (New-Object System.Management.Automation.PSCredential("<ユーザー名>", (ConvertTo-SecureString –String "<パスワード>" –AsPlainText -Force)))

あとがき

リモートマシンをコマンドで操作するには、ファイアウォールで受信の規則を追加したり、UACのリモート制限を無効化するなどの事前設定が必要になり、セキュリティが低下するため、安全なローカルネットワーク環境でのみ利用することをおススメします。