【Windows】Wake On LAN(WOL)をバッチスクリプトで実行したい!

専用ソフトをインストールせずにWindowsでWake On LANのマジックパケットを送信する方法をご紹介します。

用意するものはWindows7以降のWindowsOSのみです。
つまり、タイトルにある通り元々Windowsに用意されているバッチスクリプト(コマンドプロンプト)のみで完結します。

まずは早速スクリプトの中身をご紹介します。

上記のテキストボックスの上部にある「Copy」アイコンをクリックしてコピーし、ご自身の端末のテキストエディタ上に貼り付け「WOL.bat」という名前で保存してください。
それでは、実際に使い方を説明していきます。

実際に使ってみよう!

おそらくこのページに辿り着いた方は「起動させたいPC」のWake On LAN設定は既に終わっていて、「起動命令を出すPC」をどう方式設計するか、という目的で情報を探していたものと思われます。
(もし、前者の設定がまだの場合は、「S5 WOL」というキーワードでGoogle検索してください。たくさん情報が載ってるのですぐ分かると思います。)

というわけで早速後者の「起動命令を出すPC」にこのスクリプトファイルをコピーしてください。

そして、6行目にあるMACアドレスを起動させたいMACアドレスに書き換えてください。(2文字毎にハイフン区切り、またはコロン区切りで入力してください。)

例えば、対象のMACアドレスが「AA:BB:CC:DD:EE:FF」だった場合は下記のように書き換えます。

対象のMACアドレスに書き換えたら、あとは対象のMACアドレスを持つPCを一旦シャットダウンしてから、このバッチスクリプトを実行してください。
すると、自動的に立ち上がってくるはずです。

もし、自動的に立ち上がってこなかった場合は下記の可能性が考えられます。

・MACアドレスが間違っている。
⇒OSが認識するNICが2つ以上ある場合はよく間違えたりします。
・S5のWOL設定ができていない。
⇒こういう場合はスリープ状態だと成功するという特徴があります。
・BIOSのWOL設定ができていない。
⇒BIOSのメーカーごとに設定箇所や文言が異なるので一番切り分けが難しいかもしれません。
・ノートパソコン特有のWOLに必要な設定ができていない。
⇒カバーを閉じる時の動作は「何もしない」に設定してください。
・HDDパスワードを解除していない。
⇒情シスの人が余計な設定を入れているとこうなります。
・「起動させたいPC」と「起動命令を出すPC」が同じセグメント内にいない。
⇒簡易的なブロードキャストで実現しているのでこれはどうしようもないです。違うセグメントでどうにかしたい方は有償ソフトをお使いください。
・セキュリティの設定に引っかかっている。
⇒このスクリプトはudp9番ポートを使っているのですが、そのポートをNW機器で遮断しているともちろん起動できません。
・PCの電源は入るが、OSがブートしない。
⇒HP製のPCにありがちです。BIOSがWOL時のみNWブートしようと謎の努力を始めます。これはBIOSのBOOT設定を変更するしかないです。
・スクリプトが余計なところで改行が入ってしまっている。
⇒上のスクリプトは13行目が異様に長いので、コピペの仕方によっては自動的に改行が入ってしまうかもしれません。13行目は必ず1行になるように保存してください。

ちなみに、このスクリプトは下記のTechnetギャラリーのPowerShellスクリプトから引用しています。
Wake on LANでリモートコンピュータを起動する

引用元はPowerShellスクリプトで記載していますが、マジックパケットを出すだけならバッチ化できそうだったのでバッチ化してみました。
(引用元はudp2304番ポートを利用していますが、同一セグメントでudp9番ポートを使わない理由が分からなかったので上のバッチスクリプトではudp9番ポートに書き換えました。)

私の作ったスクリプトの13行目を見ると分かる通り、PowerShellコマンドを無理やりバッチで使うために色々裏技を使っています。
ちなみに、なんとGet-ExecutionPolicyがRestrictedでも問答無用で実行できちゃいます笑。

PowerShellスクリプトを無理やりバッチ化するのは一時期のめり込んでいて、結構色々作りました。
ただ、できるバッチスクリプトが異様に見栄えが悪く保守性が著しく低いので今回みたいに余程素直な動きのPowerShellスクリプトじゃないとバッチ化できません。

以上、ご参考になれば幸甚です。