作成 2010.09.02
更新 2011.11.27
更新 2011.11.27
PowerShell で Wake on LAN
指定したMACアドレスのPCを起動します。
コード
以下のコードをテキストで保存し、 wol.ps1 とします。
param($mac) if($mac) { if($mac -match "^([0-9a-fA-F]{2}):?([0-9a-fA-F]{2}):?([0-9a-fA-F]{2}):?([0-9a-fA-F]{2}):?([0-9a-fA-F]{2}):?([0-9a-fA-F]{2})$") { [byte[]] $bmac = @([Byte]::Parse($matches[1], [System.Globalization.NumberStyles]::HexNumber), [Byte]::Parse($matches[2], [System.Globalization.NumberStyles]::HexNumber), [Byte]::Parse($matches[3], [System.Globalization.NumberStyles]::HexNumber), [Byte]::Parse($matches[4], [System.Globalization.NumberStyles]::HexNumber), [Byte]::Parse($matches[5], [System.Globalization.NumberStyles]::HexNumber), [Byte]::Parse($matches[6], [System.Globalization.NumberStyles]::HexNumber)) [byte[]] $data = @(0xff,0xff,0xff,0xff,0xff,0xff) + $bmac + $bmac + $bmac + $bmac + $bmac + $bmac ` + $bmac + $bmac + $bmac + $bmac + $bmac + $bmac + $bmac + $bmac + $bmac + $bmac [Int64] $toad = 0xffffffffL [System.Net.IPAddress] $ipad = New-Object System.Net.IPAddress($toad) $s = New-Object System.Net.Sockets.UdpClient # UDP のポートは任意となっているが、一般的に7か2304 7:Echo, 2304:AMD Magic Packet $s.Connect($ipad, 2304) $send_size = $s.Send($data, $data.length) $s.Close() Write-Output "送信完了" } else { Write-Error "フォーマットが正しくありません。12桁の16進数を記述してください。" } } else { Write-Output "引数に MAC Address を指定してください。" }
実行例
Intel 82566DC ではうまくいきました。
PS C:\> .\wol.ps1 0019d11c4443 送信完了
タグ: PowerShell