Send-MagicPacket.ps1


<#PSScriptInfo
 
.VERSION 1.0
 
.GUID cc0177f1-70ca-466f-81e5-ec2a37e67157
 
.AUTHOR saw-friendship
 
.COMPANYNAME
 
.COPYRIGHT saw-friendship
 
.TAGS Windows Network WOL Wake-on-Lan Magic Packet
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
#>


<#
 
.DESCRIPTION
 Send MagicPacket to NIC WOL supported
 
.LINK
 https://sawfriendship.wordpress.com/
 
.EXAMPLE
 Send-MagicPacket 00155df63102
 
.EXAMPLE
 Get-DhcpServerv4Reservation -ScopeId 192.168.1.0 | Send-MagicPacket
  
 
#>
 


[CmdletBinding()]
param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][Alias("LinkLayerAddress","PhysicalAddress","ClientId")][string[]]$MacAddress,
[IPAddress]$Broadcast = [System.Net.IPAddress]::Broadcast,
[int32[]]$Ports = @(7..9)
)
    Begin{}
    Process{
        foreach ($Mac in $MacAddress) {
            
            $Mac = $Mac -replace "[g-z]|[^\w\d]"
            $bmac = $($Mac -replace "(..)(..)(..)(..)(..)(..)",'$1:$2:$3:$4:$5:$6').split(':') | % { [byte]('0x' + $_) }
            $packet = [byte[]](,0xFF * 6) + $bmac * 16
            $UdpClient = New-Object System.Net.Sockets.UdpClient
            
            $Ports | % {
            $UdpClient.Connect($broadcast, $_)
            $UdpClient.Send($packet, $packet.Length) | out-null
            }
            
            $UdpClient.Close()
            
            [pscustomobject][ordered]@{
                'Mac' = $Mac
                'Port' = $Ports
            }
        }
    }
    End{}