怎么用脚本获取网络唤醒设置

wen 实用脚本 1

本文目录导读:

怎么用脚本获取网络唤醒设置

  1. Windows (PowerShell)
  2. Linux (Bash)
  3. macOS (Bash)

获取网络唤醒(Wake-on-LAN,WOL)设置通常需要查看网卡驱动程序的属性,方法取决于你的操作系统(Windows/Linux/macOS)。

以下是几种常见的脚本方法:

Windows (PowerShell)

Windows 下主要使用 Get-NetAdapterPowerManagementGet-NetAdapterAdvancedProperty

方法 A:查看当前唤醒状态 (最推荐)

# 获取所有网卡,并显示 Wake on LAN 相关属性
Get-NetAdapter | Get-NetAdapterPowerManagement | Select-Object Name, WakeOnLan, WakeOnMagicPacket, WakeOnPattern
# 或者只查看有线网卡(通常以太网)
Get-NetAdapter -Name "Ethernet*" | Get-NetAdapterPowerManagement | Select-Object Name, WakeOnLan, WakeOnMagicPacket

方法 B:查看网卡的高级属性设置 (更原始)

# 获取名为 "Ethernet" 的网卡的所有高级属性
Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object {$_.RegistryKeyword -like "*Wake*" -or $_.RegistryKeyword -like "*WOL*"}
# 显示更简洁的表格
(Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object {$_.RegistryKeyword -like "*Wake*"} | Format-Table DisplayName, DisplayValue -AutoSize)
  • 参数含义:
    • WakeOnLan:总开关(Enabled / Disabled)。
    • WakeOnMagicPacket:是否支持魔术包唤醒(关键设置)。
    • WakeOnPattern:是否支持特定网络模式唤醒。

方法 C:查看网卡物理地址 (MAC Address) 用于后续 WOL 发送

# 获取网卡的 MAC 地址
(Get-NetAdapter -Name "Ethernet" | Select-Object MacAddress).MacAddress

Linux (Bash)

Linux 下主要使用 ethtool 工具。

确保已安装 ethtool:

sudo apt install ethtool   # Debian/Ubuntu
sudo yum install ethtool   # CentOS/RHEL

脚本获取当前 WOL 设置:

#!/bin/bash
# 获取网卡名称(通常是 eth0, ens33, enp0s3 等,排除 lo 回环)
INTERFACE=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo | head -n1)
echo "正在检查网卡: $INTERFACE"
# 使用 ethtool 获取 WOL 状态
ETHTOOL_OUTPUT=$(sudo ethtool $INTERFACE 2>/dev/null)
if [ $? -ne 0 ]; then
    echo "错误:无法获取网卡信息,请确保 ethtool 已安装且有权限。"
    exit 1
fi
# 提取 "Supports Wake-on:" 和 "Wake-on:" 行 (p 代表 magic packet)
echo "$ETHTOOL_OUTPUT" | grep -E "Supports Wake-on|Wake-on"
# 更精确地提取当前状态
WOL_STATE=$(echo "$ETHTOOL_OUTPUT" | grep "Wake-on:" | awk '{print $2}')
if [ "$WOL_STATE" == "d" ]; then
    echo "当前 WOL 状态: 禁用 (Disabled)"
elif [ "$WOL_STATE" == "p" ]; then
    echo "当前 WOL 状态: 启用魔术包 (Wake on Magic Packet)"
elif [ "$WOL_STATE" == "u" ]; then
    echo "当前 WOL 状态: 单播 (Unicast)"
elif [ "$WOL_STATE" == "g" ]; then
    echo "当前 WOL 状态: 多播 (Multicast)"
else
    echo "当前 WOL 状态: $WOL_STATE"
fi
# 可选:同时获取 MAC 地址
MAC_ADDR=$(ip link show $INTERFACE | grep ether | awk '{print $2}')
echo "网卡 MAC 地址: $MAC_ADDR"

运行说明:

  • 该脚本需要 sudo 权限因为 ethtool 需要 root 权限。
  • 常见输出:
    Supports Wake-on: pumbg
    Wake-on: d

    d 表示禁用,p 表示魔术包可用(这是 WOL 需要的)。


macOS (Bash)

macOS 下的 WOL 支持通常依赖于硬件和驱动,没有像 Linux ethtool 那样统一的命令行工具,通常需要在 系统偏好设置 → 节能/电池 中手动查看。

脚本方法 (有限): 通过检查 sysctlpmset 查看电源管理状态,但这通常不显示网卡级 WOL。

#!/bin/bash
echo "macOS 下无法通过简单脚本直接获取网卡 WOL 状态。"
echo "请前往: 系统偏好设置 -> 节能 -> 电源适配器"
echo "查看: '唤醒以供网络访问' 或类似选项"
# 检查系统是否支持网络唤醒(不一定准确)
if pmset -g | grep -q "womp"; then
    echo "系统支持网络唤醒 (Wake on Magic Packet)"
    pmset -g | grep "womp"
else
    echo "系统可能不支持或未开启网络唤醒。"
fi

系统 核心命令/方法 关键查看点
Windows Get-NetAdapterPowerManagement (PowerShell) WakeOnMagicPacket = Enabled
Linux ethtool 网卡名 Wake-on: p (p=魔术包)
macOS 图形界面 (无标准 CLI) 系统偏好设置 → 节能

建议:

  • 如果你是要发送 WOL 包(唤醒别人),你只需要知道目标设备的 MAC 地址子网广播地址,不需要获取自己电脑的 WOL 设置。
  • 如果你是要设置(开启)WOL,可以参考以下命令:
    • Windows: Set-NetAdapterPowerManagement -Name "Ethernet" -WakeOnMagicPacket Enabled
    • Linux: sudo ethtool -s eth0 wol g (启用魔术包)

抱歉,评论功能暂时关闭!