作成 2010.09.02
更新 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

©2004-2017 UPKEN IPv4