Magic Packetを送信するPowerShellのスクリプト作りました。ついでにIPアドレスからMACアドレスを調べる関数、自分自身のIPアドレスからブロードキャストアドレスを調べる関数も作りました。
WakeOnLAN関数
WakeOnLAN “ターゲットのMACアドレス” “ブロードキャストアドレス”
指定されたMACアドレスを持つマシンをWake On LAN機能で起動します。
Ip2Mac関数
Ip2Mac “ターゲットのIPアドレス”
IPアドレスからMACアドレスを調べます。戻りは文字列値で、WakeOnLAN関数の引数として使えます
MyBCAddress関数
MyBCAddress “自分自身のIPアドレス”
自分が所属するネットワークのブロードキャストアドレスを調べます。戻りは文字列。自分のIPアドレスを指定しなければならないのは、複数のネットワークアダプタが存在する可能性があり、複数のIPアドレスを持っている可能性があるから。ネットワークアドレスの指定でもいいけど、この関数使うような人はそもそもネットワークアドレス求めることができないだろうから、一番わかりやすい自分のIPアドレスにした。
10 | function global:WakeOnLAN (` |
12 | [string] $BroadCastAddress ) { |
13 | $MacPart =( $MacAddress .Split( "-" ) ` |
15 | [System.Convert]::ToByte($_,16) }) |
16 | $EndPoint = New-Object System.Net.IPEndPoint (` |
17 | [system.net.IPAddress]::Parse(( $BroadCastAddress )),10000) |
18 | $Socket = New-Object System.Net.Sockets.Socket (` |
19 | [System.Net.Sockets.AddressFamily]::InterNetwork),` |
20 | ([System.Net.Sockets.SocketType]::Dgram),` |
21 | ([System.Net.Sockets.ProtocolType]::UDP) |
22 | $Socket .SetSocketOption(` |
23 | [System.Net.Sockets.SocketOptionLevel]::Socket,` |
24 | [System.Net.Sockets.SocketOptionName]::Broadcast, $true ) |
25 | [void] $Socket .SendTo(([byte[]] (@(0xFF) *6))+( $MacPart *16), $EndPoint ) |
34 | function global:Ip2Mac([string] $IP ){ |
35 | (Get -NetNeighbor -IPAddress $IP ` |
36 | -ErrorAction SilentlyContinue).LinkLayerAddress |
44 | function global:MyBCAddress([String] $MyIP ) { |
47 | Get -CimInstance -Class Win32_NetworkAdapterConfiguration ` |
48 | -ErrorAction SilentlyContinue ` |
49 | | Where-Object {$_.IPaddress -contains $MyIP }` |
51 | $mask = -bnot [System.BitConverter]::ToInt32(( $NetMask .Split( "." ) ` |
52 | | ForEach-Object {[System.Convert]::ToByte($_,10)}),0) |
53 | $Addr =[System.BitConverter]::ToInt32(( $MyIP .Split( "." )` |
54 | | ForEach-Object {[System.Convert]::ToByte($_,10)}),0) |
55 | return [System.BitConverter]::GetBytes( $mask -bor $Addr ) -join "." |
57 | Catch { Write-Host 'Bad IP Address' } |
0 件のコメント:
コメントを投稿