"PowerShell Wake-on-LAN allows you to remotely wake up a computer on your network using its MAC address, enabling efficient management of devices."
Here's a simple code snippet to use Wake-on-LAN in PowerShell:
$macAddress = "00:11:22:33:44:55"
$bytes = [byte[]]::new(6 + 16)
0..5 | ForEach-Object { $bytes[$_] = 0xFF }
$macBytes = $macAddress -split ':' | ForEach-Object { [byte]::Parse($_, [System.Globalization.NumberStyles]::HexNumber) }
0..15 | ForEach-Object { $macBytes.CopyTo($bytes, 6 + ($_ * 6)) }
$udpClient = New-Object System.Net.Sockets.UdpClient
$udpClient.Connect([System.Net.IPAddress]::Broadcast, 9)
$udpClient.Send($bytes, $bytes.Length)
$udpClient.Close()
This script broadcasts a magic packet to wake a device with the specified MAC address.
Understanding Wake on LAN
What is Wake on LAN?
Wake on LAN (WoL) is a network standard that allows a computer to be turned on or awakened from a low-power state remotely. At its core, WoL functions by sending a specially formatted packet, known as a magic packet, to the targeted machine. This magic packet contains the MAC address of the device to wake up, repeated several times, enabling the network interface card (NIC) of the device to listen for these packets while in a powered-down state.
Use Cases for Wake on LAN
Using Wake on LAN can be incredibly advantageous in various scenarios:
-
Remote Management: Administrators can control systems without physically being present, saving both time and effort.
-
Energy-Saving: WoL allows users to power down machines when not in use, conserving energy, while still enabling quick access when needed.
-
Convenience for IT Professionals: Underlying installations, updates, or troubleshooting can be done remotely without the need to be on-site.

PowerShell and Wake on LAN
Why Choose PowerShell for WoL?
PowerShell is a powerful scripting language and automation tool in the Windows ecosystem, making it the perfect choice for executing Wake on LAN commands. The benefits of using PowerShell for WoL include:
-
Automation: PowerShell can script repetitive tasks, enabling IT departments to streamline workflows.
-
Integration with Windows: As a native tool, PowerShell provides seamless access to Windows-based networks.
-
Versatile Management: With its capabilities, users can manage various functions beyond just WoL, all from the same environment.
Requirements for Using PowerShell Wake on LAN
Before diving into scripting, ensure you meet the following requirements:
-
Hardware Prerequisites: Ensure that your network card supports Wake on LAN capabilities, and check the BIOS settings to enable WoL.
-
Software Prerequisites: A compatible version of PowerShell is required, along with necessary modules for networking functions.
-
Network Configuration: Ensure that your network is properly set up to support the transmission of broadcast packets, typically sent to the `255.255.255.255` address.

Creating a PowerShell Script for Wake on LAN
Understanding the Magic Packet
The magic packet is a UDP packet that triggers the WOL functionality. Understanding its structure is key to effectively leveraging Wake on LAN. It consists of six bytes of `FF` followed by sixteen repetitions of the target machine's MAC address.
Step-by-Step Guide to Writing the PowerShell Script
Setting Up the Script Environment
To set up an environment for scripting, it’s recommended to use Windows PowerShell ISE or any other code editor suited for PowerShell scripting.
Script Breakdown
Let's break down the essential components of the script you will create:
Declaring Parameters
You need to declare parameters that your script will use, such as the MAC address of the target device and the broadcast address (usually `255.255.255.255`).
Encoding the Magic Packet
First, you need to encode the magic packet structure. Here’s how you can do that in PowerShell:
$macAddress = "00:11:22:33:44:55"
$broadcastAddress = "255.255.255.255"
$macBytes = $macAddress -split ':' | ForEach-Object { [byte]::Parse($_, [System.Globalization.NumberStyles]::AllowHexSpecifier) }
$packet = ,0xFF * 6 + ($macBytes * 16)
This code splits the provided MAC address into its byte representation, prepends six bytes of `FF`, and concatenates the MAC bytes to create the magic packet.
Sending the Magic Packet
To send the magic packet across the network, you will create a UDP client. The code below demonstrates how to achieve that:
$udpClient = New-Object System.Net.Sockets.UdpClient
$udpClient.Send([byte[]]$packet, $packet.Length, $broadcastAddress, 9)
$udpClient.Close()
Here, the `UdpClient` sends the magic packet to the target MAC address over UDP port 9, which is the port commonly used for WOL.
Complete PowerShell Script Example
Integrating all the components, your finished PowerShell function to send the WoL packet would look like this:
Function Send-WoL {
param (
[string]$macAddress,
[string]$broadcastAddress = "255.255.255.255"
)
$macBytes = $macAddress -split ':' | ForEach-Object { [byte]::Parse($_, [System.Globalization.NumberStyles]::AllowHexSpecifier) }
$packet = ,0xFF * 6 + ($macBytes * 16)
$udpClient = New-Object System.Net.Sockets.UdpClient
$udpClient.Send([byte[]]$packet, $packet.Length, $broadcastAddress, 9)
$udpClient.Close()
}
This function encapsulates the entire process, making it easy to call whenever you need to wake a machine.

Testing the Wake on LAN Script
How to Test Your Script for Success
Once you have your script ready, it’s time to test it. Make sure that the target machine's WoL options are enabled in the BIOS, and that it is connected to the network.
- Run the Script: Execute your function with the correct MAC address.
- Verification Methods: Monitor the target machine to see if it successfully turns on.
- Troubleshooting Common Issues: If the wake attempt fails, check:
- Network settings (such as firewall configurations that could block UDP traffic).
- Whether the target machine is indeed capable of being awakened.
Real-World Scenarios
There are countless scenarios where Wake on LAN is beneficial. For example, a small office environment could have all its computers powered down after hours. Using a PowerShell script, an IT administrator can remotely wake them up to conduct maintenance tasks during non-working hours.

Conclusion
PowerShell Wake on LAN offers powerful capabilities to remotely manage devices effectively and efficiently. By mastering the creation of magic packets with PowerShell, you empower yourself with a tool to optimize your IT operations, conserve energy, and enhance convenience.
As you experiment with your PowerShell scripts, you will discover a world of possibilities in automation and network management. Don’t hesitate to explore further commands within the PowerShell ecosystem to continue expanding your knowledge and capabilities.

Additional Resources
For those eager to delve deeper into the realm of PowerShell, consider exploring more advanced commands, related articles, and official PowerShell documentation to broaden your understanding and refine your skills.