遠隔でPC/サーバの電源を投入したい、かつタスクスケジューラで制御したい、など。
そんなとき便利なのがWOLですね。
WOL(Wake on LAN)については高機能なフリーウェアもありますが、勝手にソフトウェアをインストールできない環境など、Windows標準のツールできると便利です。
ということで、今回はPowershellスクリプトでWOLします。
要はマジックパケットを投げれれば良いので、.NETのSocketオブジェクトを使ってブロードキャストしているだけです。
対象のNICについて物理アドレス(MACアドレス)を調べ、先頭にリストとして定義しておいて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $mac_addr = @("xx:xx:xx:xx:xx:xx") $header=[byte[]](@(0xFF)*6) foreach ($item in $mac_addr){ Write-Host "send magic packet to:" $item $addr = [byte[]]($item.split(":") | %{ [Convert]::ToInt32($_, 16)}); $magicpacket = $header + $addr * 16; $target = [System.Net.IPAddress]::Broadcast; $client = New-Object System.Net.Sockets.UdpClient; $client.Connect($target, 2304); $client.Send($magicpacket, $magicpacket.Length) | Out-Null $client.Close(); Write-Host "Send magic packet to:" $item -ForegroundColor Green } |
Python版はこちら。
コメント
[…] PowerShellでWake-on-LAN […]