WindowsでMagic Packetを送信してWake-on-LANを使う方法
Wake-on-LAN(WOL)を利用すると、ネットワーク経由でPCの電源を投入できます。
展示用PCやサーバー、リモートアクセス用PCなどを必要な時だけ起動したい場合に便利です。
今回は Windows から Magic Packet を送信する方法をまとめます。
Wake-on-LANとは
Wake-on-LAN(WOL)は、LAN上に送信された Magic Packet を受信することで、スリープ中やシャットダウン状態のPCを起動する仕組みです。
PCのネットワークアダプタは待機電力で動作し続けており、自身のMACアドレス宛のMagic Packetを受信するとシステムを起動します。
事前準備
対象PC側でWake-on-LANを有効にしておく必要があります。
BIOS / UEFI
以下のような項目を有効化します。
Wake on LAN
Power On By PCI-E
Resume By LAN
マザーボードによって名称は異なります。
Windowsの設定
デバイスマネージャーを開き、
ネットワークアダプター
↓
対象NIC
↓
プロパティ
電源の管理
☑ このデバイスでコンピューターのスタンバイ状態を解除できるようにする
☑ Magic Packetでのみコンピューターのスタンバイ状態を解除できるようにする
詳細設定
Wake on Magic Packet → Enabled
PowerShellでMagic Packetを送信する
追加ソフトを入れなくても、PowerShellだけでMagic Packetを送信できます。
$mac = "00-11-22-33-44-55"
$broadcast = "192.168.1.255"
$port = 9
$macBytes = ($mac -split "[:-]" | ForEach-Object { [byte]("0x$_") })
$packet = (,0xFF * 6) + ($macBytes * 16)
$udp = New-Object System.Net.Sockets.UdpClient
$udp.EnableBroadcast = $true
$udp.Connect($broadcast, $port)
$udp.Send($packet, $packet.Length)
$udp.Close()
実行するとUDPポート9へMagic Packetが送信されます。
毎回使うならスクリプト化がおすすめ
毎回PowerShellコードを書くのは面倒なので、wol.ps1 として保存しておくと便利です。
wol.ps1
param(
[Parameter(Mandatory=$true)]
[string]$MacAddress,
[string]$Broadcast = "255.255.255.255",
[int]$Port = 9
)
$macBytes = ($MacAddress -split "[:-]" | ForEach-Object {
[byte]("0x$_")
})
$packet = (,0xFF * 6) + ($macBytes * 16)
$udp = New-Object System.Net.Sockets.UdpClient
$udp.EnableBroadcast = $true
$udp.Connect($Broadcast, $Port)
[void]$udp.Send($packet, $packet.Length)
$udp.Close()
Write-Host "Magic Packet sent to $MacAddress via $Broadcast`:$Port"
実行方法
MACアドレスを指定して実行します。
powershell -ExecutionPolicy Bypass -File .\wol.ps1 00-11-22-33-44-55
ブロードキャストアドレスを指定する場合は、
powershell -ExecutionPolicy Bypass -File .\wol.ps1 00-11-22-33-44-55 -Broadcast 192.168.1.255
とします。
実行結果:
Magic Packet sent to 00-11-22-33-44-55 via 192.168.1.255:9
トラブルシューティング
起動しない
以下を確認してください。
- MACアドレスが正しいか
- BIOSでWake-on-LANが有効か
- NICでWake on Magic Packetが有効か
- 有線LAN接続か
- スイッチやルーターがブロードキャストを遮断していないか
スリープからは起きるがシャットダウンから起きない
マザーボードによっては
ErP
Deep Sleep
S5 Power Saving
などの省電力機能が影響する場合があります。
おわりに
GUIツールもありますが、PowerShellだけでMagic Packetを送信できるので、展示システムや運用スクリプトへの組み込みにも便利です。
私は展示用PCを遠隔起動する用途で利用していますが、1本スクリプトを用意しておくと意外と重宝します。