# 配置区域
$TargetMac = "00-55-7B-B5-7D-F7" # Android设备的MAC地址,用减号分隔
$TargetIP = "172.20.20.111" # Android设备的IP(用于检测何时关机)
$BroadcastIP = "172.20.20.255" # 局域网广播地址
$WaitMilliseconds = 500 # 关机后等待多少毫秒发送唤醒包(在这里修改 7000, 8000, 10000 进行测试)
# 定义发送 Magic Packet 的函数
function Send-WOL {
param (
[string]$MacAddress,
[string]$BroadcastAddress
)
$MacByteString = $MacAddress -split "[:-]" | ForEach-Object { [byte]('0x' + $_) }
$MagicPacket = [byte[]](,0xFF * 6) + ($MacByteString * 16)
$UdpClient = New-Object System.Net.Sockets.UdpClient
$UdpClient.Connect($BroadcastAddress, 9)
$UdpClient.Send($MagicPacket, $MagicPacket.Length)
$UdpClient.Close()
Write-Host ">>> Magic Packet 发送完毕!" -ForegroundColor Green
}
# 主流程
Write-Host "开始测试..."
Write-Host "请手动对Android设备执行关机,或者通过ADB执行关机..."
# 1. 循环检测设备是否已断网 (Ping不通视为关机开始)
while ($true) {
if (Test-Connection -ComputerName $TargetIP -Count 1 -Quiet) {
Write-Host "设备在线,等待关机..." -NoNewline
Start-Sleep -Milliseconds 500
} else {
Write-Host "`n设备已离线 (Ping不通),计时开始!" -ForegroundColor Yellow
break
}
}
# 2. 等待指定的“死亡时间”
Write-Host "正在等待 $WaitMilliseconds 毫秒..."
Start-Sleep -Milliseconds $WaitMilliseconds
# 3. 发送唤醒包
Send-WOL -MacAddress $TargetMac -BroadcastAddress $BroadcastIP
Write-Host "测试结束。请观察设备是否重启,或指示灯状态。"