怎样用脚本获取系统序列号?

wen 实用脚本 2

本文目录导读:

怎样用脚本获取系统序列号?

  1. Windows 系统(最常用)
  2. Linux 系统
  3. macOS 系统
  4. 重要注意事项
  5. 最通用的方法

获取系统序列号(通常指主板序列号、系统UUID或硬件ID)的方法强烈依赖于操作系统,不存在跨所有系统(Windows/Linux/macOS)通用的单一脚本。

以下提供针对不同系统的脚本方法,并附带重要的安全与权限说明

Windows 系统(最常用)

在 Windows 中,通常使用 wmic(Windows Management Instrumentation Command-line,Windows管理规范命令行工具)或 powershell 来获取。

方法 A: 使用 CMD/Batch 脚本

新建一个 .bat 文件,内容如下:

@echo off
echo 正在获取主板序列号(最接近"系统序列号")...
wmic baseboard get serialnumber
echo.
echo 正在获取系统 UUID(唯一标识符)...
wmic csproduct get uuid

输出示例:

SerialNumber
NB12345678
UUID
A1B2C3D4-E5F6-7890-1234-567890ABCDEF

方法 B: 使用 PowerShell 脚本

新建一个 .ps1 文件,内容如下:

# 获取主板序列号(最常用)
$Serial = (Get-WmiObject -Class Win32_BaseBoard).SerialNumber
Write-Host "主板序列号: $Serial"
# 获取 BIOS 序列号(品牌机常见)
$BIOSSerial = (Get-WmiObject -Class Win32_BIOS).SerialNumber
Write-Host "BIOS序列号: $BIOSSerial"
# 获取系统 UUID
$UUID = (Get-WmiObject -Class Win32_ComputerSystemProduct).UUID
Write-Host "系统 UUID: $UUID"
  • 注意:某些组装机或虚拟机的主板序列号可能显示为 To be filled by O.E.M.(尚待被原始设备制造商填充)或 0,这是正常的,此时可以尝试 Win32_BIOSWin32_ComputerSystemProduct
  • 权限:通常需要以管理员身份运行脚本。

Linux 系统

在 Linux 中,主要通过读取 /sys 文件系统或使用 dmidecode 命令。

方法 A: 使用 Shell 脚本(推荐)

新建一个 .sh 文件,内容如下:

#!/bin/bash
echo "主板序列号:"
sudo dmidecode -s baseboard-serial-number 2>/dev/null || echo "需要root权限或硬件不支持"
echo "系统 UUID:"
sudo dmidecode -s system-uuid 2>/dev/null || echo "需要root权限或硬件不支持"
echo "机器序列号(品牌机如Dell/HP/Lenovo):"
sudo dmidecode -s system-serial-number
  • 依赖:需要安装 dmidecode(大多数发行版已预装,若没有可用 sudo apt install dmidecodesudo yum install dmidecode)。
  • 权限dmidecode 需要 root 权限,如果脚本被普通用户执行,可以用 sudo,或者配置 sudoers 免密。

方法 B: 不依赖 root 的替代方案

#!/bin/bash
# 某些信息无需root可读
echo "产品名称(CPU信息等):"
cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null || echo "不可读"
echo "序列号(通常需root):"
cat /sys/devices/virtual/dmi/id/product_serial 2>/dev/null || echo "需要root权限"

macOS 系统

在 macOS 中,使用 system_profiler 命令。

#!/bin/bash
echo "硬件 UUID:"
system_profiler SPHardwareDataType | grep "Hardware UUID" | awk '{print $3}'
echo "序列号(Serial Number,即系统序列号):"
system_profiler SPHardwareDataType | grep "Serial Number (system)" | awk '{print $4}'
echo "主板序列号(如有):"
system_profiler SPHardwareDataType | grep "Board Serial" | awk '{print $4}'
  • 权限:普通用户即可执行。

重要注意事项

  1. 含义差异

    • Windowswmic baseboard get serialnumber 是主板序列号;wmic bios get serialnumber 是 BIOS 序列号(品牌机如 Dell 会与机箱标签一致)。
    • Linux/macOSsystem-serial-number 通常对应硬件机箱上的序列号(服务标签),更接近普通用户理解的“系统序列号”。
    • 不同品牌(Dell、HP、Lenovo、组装机)返回的信息格式可能不同,组装机往往缺失序列号。
  2. 权限安全

    • Windows 脚本建议在管理员终端中运行。
    • Linux 脚本使用 sudo dmidecode
    • 恶意脚本也可以获取这些信息,因此不要随意运行来源不明的脚本。
  3. 虚拟环境

    在虚拟机(VMware、VirtualBox、云服务器)中,序列号可能是虚拟机动态生成的随机值,不可用于硬件唯一性绑定。

最通用的方法

操作系统 推荐命令 含义
Windows wmic csproduct get uuid 系统 UUID(唯一且稳定)
Linux sudo dmidecode -s system-uuid 系统 UUID
macOS system_profiler SPHardwareDataType \ | grep “Hardware UUID”

如果你是普通用户,最通用且跨平台的概念是系统 UUID,它通常不会轻易改变,如果有具体的脚本语言(Python、PowerShell 等)或操作系统环境需要,请补充说明,我可以提供更精确的代码。

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