You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell发送Wake-on-LAN魔术数据包

原生PowerShell发送Wake-on-LAN魔术包实现方案

无需安装任何第三方模块、外部工具,仅依靠PowerShell内置的.NET基础类库即可实现WOL魔术包构造与发送,兼容PowerShell 5.1、PowerShell 7+全版本。

核心原理

WOL标准魔术包结构固定,总长度102字节:

  • 前6字节为固定填充值0xFF
  • 后续连续重复16次目标设备的6字节MAC地址
    数据包通常通过UDP协议发往目标子网的广播地址,常用端口为7或9。

实现代码

将以下代码直接粘贴到PowerShell窗口执行,即可获得Send-WOLPacket命令:

function Send-WOLPacket {
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string]$MacAddress,
        [string]$BroadcastAddress = '255.255.255.255',
        [int]$Port = 9
    )

    process {
        # 清洗MAC地址,移除所有非十六进制分隔符
        $macClean = $MacAddress -replace '[^0-9A-Fa-f]', ''
        if ($macClean.Length -ne 12) {
            throw "MAC地址格式无效,标准MAC地址应包含12位十六进制字符"
        }

        # 转换MAC为字节数组
        $macBytes = [byte[]]::new(6)
        for ($i = 0; $i -lt 6; $i++) {
            $macBytes[$i] = [Convert]::ToByte($macClean.Substring($i * 2, 2), 16)
        }

        # 构造魔术包
        $magicPacket = [byte[]]::new(102)
        # 填充前6个0xFF字节
        for ($i = 0; $i -lt 6; $i++) {
            $magicPacket[$i] = 0xFF
        }
        # 重复填充16次MAC地址
        for ($i = 1; $i -le 16; $i++) {
            [Array]::Copy($macBytes, 0, $magicPacket, 6 + ($i - 1) * 6, 6)
        }

        # 发送UDP数据包
        $udpClient = [System.Net.Sockets.UdpClient]::new()
        try {
            $udpClient.Connect($BroadcastAddress, $Port)
            $udpClient.Send($magicPacket, $magicPacket.Length) | Out-Null
        }
        finally {
            $udpClient.Close()
            $udpClient.Dispose()
        }
    }
}

使用示例

  • 基础唤醒(同子网设备,默认广播地址、9端口)
    Send-WOLPacket -MacAddress 'AA-BB-CC-DD-EE-FF'
    
    支持的MAC格式包括冒号分隔(AA:BB:CC:DD:EE:FF)、横杠分隔、点分隔(AABB.CCDD.EEFF)、无分隔符(AABBCCDDEEFF),无需提前手动格式化。
  • 跨网段唤醒(指定目标子网广播地址、自定义端口)
    Send-WOLPacket -MacAddress 'AA:BB:CC:DD:EE:FF' -BroadcastAddress '192.168.3.255' -Port 7
    
  • 批量唤醒多台设备
    @('AA-BB-CC-DD-EE-FF', '11-22-33-44-55-66', 'aabb.ccdd.eeff') | ForEach-Object {
        Send-WOLPacket -MacAddress $_
    }
    

注意:WOL功能需要提前在目标设备的BIOS/UEFI设置、网卡属性中开启,跨网段唤醒需要对应路由器配置允许定向广播包转发。

内容的提问来源于stack exchange,提问作者lauxjpn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:57:21