IT運用・情シス技術ノート

ネットワーク内のPCの電源操作

突然ですが皆さんは、宅内や社内のちょっと離れた場所のWindowsPCの電源操作はどうされてますか?

リモートクライアントが有ればGUI操作したり、SSHで接続してシャットダウンコマンドを実行したり等、様々な方法があるかと思いますが、個人的には簡単なショートカットアイコンからの操作ができるのが好みだったりします。


今回はWindowsの標準機能である、「タスクスケジューラー」「PowerShell」を組み合わせた手順をご紹介します。
注) 本操作はWakeOnLanの有効化とIPアドレスの固定を前提としています

 

・手順①
 まずは、操作を受ける側のPCのタスクスケジューラーでスリープ操作のタスクを作成します。

 「タスクスケジューラー」を起動し右ペインから「タスクの作成」を選択し、任意のタスク名を入力します。

 後ほど、このタスクを実行する際の名称になりますので今回は”RemoteSleep”としています。

・手順②
 次に、作成したタスクの操作内容を「操作」タブの「新規」から設定します。

 表示されたウインドウで今回は例としてスリープの操作を登録します。

 ・「プログラム/スクリプト」の欄へ”rundll32.exe”

 ・「引数の追加」の欄へ”powrprof.dll,SetSuspendState”

 ※ココで任意のファイル/コマンドオプションやバッチファイルを参照することで、その他の操作にも応用できます

 入力が終わったら、各ウインドウを「OK」で閉じ、タスクスケジューラーにタスク名が登録された事を確認します。

・手順③
 次に作成したタスクを別のネットワーク内のWindowsPCから実行する為、「schtasks /Run」コマンドを使用した簡単なバッチファイルを作成します。

「メモ帳」等のテキストエディタで先ほどタスクを作成したPCのIPアドレス/ユーザー名/パスワードを記述し保存後
拡張子を”.bat”に変更してください。

@echo off
schtasks /run /S 192.168.XXX.XXX /U ユーザー名 /P パスワード /TN RemoteSleep
exit

あとは、作成したバッチファイルを直接実行して操作したり、ショートカットを作成する等して実行すれば指定したPCで作成したタスクが実行され、スリープ状態となるはずです。

 

※「schtasks /run」実行時にエラーが出る場合は、タスクスケジューラー関連のサービスの実行状態の確認またはポート開放が必要になるケースがあります

 

・手順④

 次に、スリープしたPCの遠隔起動ですが先ほど同様に、簡単なバッチファイルを作成します。

 内容は単純に指定したMacアドレスへマジックパケットを送信する内容ですので、下記コマンドをメモ帳へコピーし起動させたいPCのネットワークアダプタのMacアドレスを指定します。

 

@echo off
powershell "$macAddr=[byte[]]("""XX-XX-XX-XX-XX-XX""".split("""-""") | ForEach-Object{[Convert]::ToInt32($_, 16)});$magicPacket=([byte[]](@(0xff)*6)) + $macAddr * 16;$udpClient=new-object System.Net.Sockets.UdpClient;$WakeUpTarget=[System.Net.IPAddress]::Broadcast;$udpClient.Connect($WakeUpTarget, 9);$udpClient.Send($magicPacket, $magicPacket.Length)|out-null;$udpClient.Close();"
exit

 

あとは、先ほどと同様に、バッチファイルを直接実行して操作したり、ショートカットを作成する等して実行すれば
指定したPCのスリープが解除されるはずです。

今回ご紹介した、スリープの操作以外にも、タスク登録時に、様々なバッチファイルや実行ファイルが指定できますので日常的に行う別PCでの操作をあらかじめ登録することで、応用ができるかと思いますので是非お試しください。

クラウドからオンプレミス、パソコンからモバイルまで
長年の経験で培ったノウハウで
御社のITソリューションに「+α」なサービスを
ご提供いたします。

お問い合わせはこちら
お問い合わせは
こちらから