■ リモートで電源をオンにしたいのと同じくらい、リモートで電源をオフにしたい。
「リモートデスクトップ接続」や、「WOL」を設定しているのに、「リモートシャットダウン」は設定していなかったことに気が付いた。
画面がブラックアウトしてキーボードや、マウス操作を受け付けてくれない時や、
ハングアップした時の奥の手として設定しておくべき。
Windows 系OS でリモートシャットダウンする。
shutdown コマンドについて
コンピューターをシャットダウンするコマンドです。
例えば「shutdown /s」を実行すると即時コンピューターがシャットダウンします。
使用法:
C:\Windows\system32\shutdown.exe [/i | /l | /s | /sg | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/fw] [/f]
[/m \\コンピューター][/t xxx][/d [p|u:]xx:yy [/c "コメント"]]
例:コンピューター名(IPアドレスでも可)を指定して再起動を 120秒後に実行する。
shutdown /r( /s ) /m \\コンピューター名( or IPアドレス ) /t 120
例:やっぱりやめる。
shutdown /a /m \\コンピューター名
引数の説明。※詳しくはヘルプ見てください。
/? ヘルプを表示します。オプションを入力しないのと同じです。
/s コンピューターをシャットダウンします。
/r コンピューターを完全にシャットダウンして再起動します。
/a システムのシャットダウンを中止します。
これは、タイムアウト期間にのみ使用できます。
/m \\コンピューター 対象となるコンピューターを指定します。
/t xxx シャットダウンまでのタイムアウト期間を xxx 秒に設定します。
有効範囲は 0 から 315360000 (10 年) までで、既定値は 30 です。
タイムアウト期間が 0 より大きい場合、/f パラメーターが
暗黙的に指定されます。
「/m コンピューター名」を引数に指定すると、ネットワーク上のコンピューターのシャットダウンも可能です。
つまり、「リモートシャットダウン」ができます。
shutdown /m <コンピューター名 or IPアドレス> <オプション>
事前に仕込みをしないと「リモートシャットダウン」はできない。
shutdown コマンドを使うとリモート環境をシャットダウンすることが出来るわけですが、
デフォルトの状態ではシャットダウンできませんでした。
リモートシャットダウンに必要な3つの条件。
リモートシャットダウンをするには以下の「3つの条件」が必要です。
■ ポート445 経由での通信を許可するように設定する。
(ファイアウォールで受信規則を作成。)
■ シャットダウンするコンピューター上で管理者グループに入っている。
■ レジストリ「LocalAccountTokenFilterPolicy 」を設定をする 。
ポート445 の開放(ファイアウォール)
シャットダウンのコマンドは、445 番ポートを使って通信しますが、
基本的にファイアウォールは外部からの通信を遮断するので、
「445 ポートを使用した通信を許可する設定」を行います。
面倒な方はファイアウォールを解除。
※めちゃめちゃオススメしません。
シャットダウンするコンピューター上で管理者グループに入っている。
リモートでシャットダウンのコマンドを実行すると、下図のようなメッセージでアクセスが拒否されます。
シャットダウンのコマンドがリモート先で実行される際に、
UAC(※)が発生するため、「拒否されました」のメッセージが表示されてしまうとのこと。
※:これ。
これの対策として「管理者グループに入っている人からのコマンド実行時にUAC を発生させない」という設定を行います。
ですので実際は、「この後の設定のための仕込み」ということになるのですが、シャットダウンを行うユーザーを管理者グループに入れておきます。
例えば「unimoni」ユーザーでシャットダウンコマンドを実行するのであれば、
ターゲットのコンピューター上で「unimoni」が管理者グループに入ってないといけません。
シャットダウンを許可されたユーザーならOK というわけではなく、「管理者」である必要があります。
shutdown を実行するためのユーザーを作成。
管理者(Administrators グループ)にする。
レジストリ「LocalAccountTokenFilterPolicy」の設定をする。
(この設定が管理者グループはリモートコマンド実行時にUAC を発生させないという設定になります。)
レジストリエディタを開き、以下のキーに「LocalAccountTokenFilterPolicy」を追加します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
追加してから、値を修正する。
名前 | LocalAccountTokenFilterPolicy |
種類 | REG_DWORD |
データ | 1 |
参考
リモートのWindows PCのシャットダウン方法(shutdown.exe実行時の「アクセスが拒否されました。(5)」を解決する)
ログイン中のユーザー以外のユーザー権限でシャットダウンしたい。
コマンドを実行するユーザー名とターゲット上の管理者ユーザー名が一致しない場合に、
ターゲット上の管理者ユーザー名とパスワードを使用して、シャットダウンを実行します。
shutdown のコマンドを実行する前に、「net use」 を使って任意のユーザー認証をしておく。
現在のユーザーだとアクセス拒否されてしまう。
いったん、他の管理者グループユーザーで認証を通しておく。
net use \\<コンピューター名 or IPアドレス> /user:<ユーザー名> <パスワード>
リモートシャットダウン先のPC での表示
powershell のコマンドを使う
「shutdown」ではユーザーが指定できないので、powershell のコマンド「Restart-Computer」を使います。
Microsoft Docs Restart-Computer
Restart-Computer -Force -ComputerName "コンピューター名" -Credential (Get-Credential)
実行後にシャットダウンを実行する「ユーザー名とパスワード」を入力する。
条件は「shutdown」の3つの条件と同じですが、開放するポートが違います。
- ポートの開放(ファイアウォール)
- シャットダウンするコンピューター上で管理者権限を持っている
- レジストリ「LocalAccountTokenFilterPolicy 」を設定をする
https://docs.microsoft.com/ja-jp/archive/blogs/jpntsblog/rpc
これらはRPC という機能になるらしいです。
つまり、ポート 135 と49152 ~65535 を開放します。
結構な開放になるので、ある程度制限を設けておかないとセキュリティ面で心配ではありますね。
あと、PowerShell のバージョンなどにも留意する必要がありそうです。
できるなら、SSH 接続 からシャットダウンコマンドを実行した方がいいのかも。
参考
Windows PCをリモートシャットダウンする方法やエラー時の対処方法
リモート電源オフの導入。
スマートプラグで電源の供給自体を停止。
結局、完全にハングアップしてコマンドを受け付けてくれない時の対策として、
リモート電源プラグも導入することにしました。
消費電力もモニタリングできて〇
これならGoogle Home 等のクラウドサービスを経由して、
外部ネットワークからでも電源のオン / オフが可能になります。
最後は物理っす。IoT っす。
以上です。
うまいことできました。
ありがとう~
良かったです~^^
こちらこそ、お役にたてたみたいで嬉しいです。
コメントありがとうございました。