Last active
August 7, 2020 09:03
-
-
Save moddingg33k/d5399194d3c3ed919ddb586b8355b0de to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://powershell.one/code/11.html | |
Function Invoke-WakeOnLan | |
{ | |
param | |
( | |
# one or more MACAddresses | |
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)] | |
# mac address must be a following this regex pattern: | |
[ValidatePattern('^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$')] | |
[string[]] | |
$MacAddress | |
) | |
begin | |
{ | |
# instantiate a UDP client: | |
$UDPclient = [System.Net.Sockets.UdpClient]::new() | |
} | |
process | |
{ | |
foreach($_ in $MacAddress) | |
{ | |
try { | |
$currentMacAddress = $_ | |
# get byte array from mac address: | |
$mac = $currentMacAddress -split '[:-]' | | |
# convert the hex number into byte: | |
ForEach-Object { | |
[System.Convert]::ToByte($_, 16) | |
} | |
#region compose the "magic packet" | |
# create a byte array with 102 bytes initialized to 255 each: | |
$packet = [byte[]](,0xFF * 102) | |
# leave the first 6 bytes untouched, and | |
# repeat the target mac address bytes in bytes 7 through 102: | |
6..101 | Foreach-Object { | |
# $_ is indexing in the byte array, | |
# $_ % 6 produces repeating indices between 0 and 5 | |
# (modulo operator) | |
$packet[$_] = $mac[($_ % 6)] | |
} | |
#endregion | |
# connect to port 400 on broadcast address: | |
$UDPclient.Connect(([System.Net.IPAddress]::Broadcast),4000) | |
# send the magic packet to the broadcast address: | |
$null = $UDPclient.Send($packet, $packet.Length) | |
Write-Verbose "sent magic packet to $currentMacAddress..." | |
} | |
catch | |
{ | |
Write-Warning "Unable to send ${mac}: $_" | |
} | |
} | |
} | |
end | |
{ | |
# release the UDF client and free its memory: | |
$UDPclient.Close() | |
$UDPclient.Dispose() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment