怎么用脚本获取电脑唯一标识

wen 实用脚本 2

本文目录导读:

怎么用脚本获取电脑唯一标识

  1. Windows 系统 (批处理/BAT脚本)
  2. PowerShell 脚本 (更强大)
  3. VBScript 脚本
  4. Python 脚本 (跨平台)
  5. Linux/Unix 脚本
  6. 推荐的完整方案 (PowerShell)
  7. 注意事项

我来介绍几种获取电脑唯一标识的方法,根据不同的需求和平台选择合适的方式:

Windows 系统 (批处理/BAT脚本)

使用 WMIC 获取硬件信息

@echo off
echo ===== 计算机标识信息 =====
echo.
echo 主板序列号:
wmic baseboard get serialnumber
echo.
echo CPU序列号:
wmic cpu get processorid
echo.
echo 硬盘序列号:
wmic diskdrive get serialnumber
echo.
echo MAC地址:
getmac /fo csv
echo.
echo 计算机GUID:
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography /v MachineGuid
pause

生成唯一标识(推荐方法)

@echo off
set "COMPUTER_INFO=%COMPUTERNAME%-%USERNAME%"
:: 获取主板序列号
for /f "skip=1 tokens=2 delims==" %%i in ('wmic baseboard get serialnumber /value') do set "MB_SN=%%i"
:: 获取硬盘序列号
for /f "skip=1 tokens=2 delims==" %%i in ('wmic diskdrive get serialnumber /value') do set "DISK_SN=%%i"
:: 生成唯一标识
echo 计算机名: %COMPUTERNAME%
echo 用户: %USERNAME%
echo 主板序列号: %MB_SN%
echo 硬盘序列号: %DISK_SN%
echo.
echo 唯一标识: %COMPUTERNAME%-%MB_SN%-%DISK_SN%
pause

PowerShell 脚本 (更强大)

# 获取系统信息并生成唯一标识
function Get-MachineGUID {
    # 方法1: 获取MachineGUID
    $machineGUID = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Cryptography").MachineGuid
    # 方法2: 获取BIOS信息
    $biosInfo = Get-WmiObject -Class Win32_BIOS
    $biosSerial = $biosInfo.SerialNumber
    # 方法3: 获取硬盘信息
    $diskInfo = Get-WmiObject Win32_DiskDrive | Select-Object -First 1
    $diskSerial = $diskInfo.SerialNumber
    # 生成组合标识
    $uniqueID = $machineGUID + "-" + $biosSerial + "-" + $diskSerial
    Write-Host "机器GUID: $machineGUID" -ForegroundColor Green
    Write-Host "BIOS序列号: $biosSerial" -ForegroundColor Green
    Write-Host "硬盘序列号: $diskSerial" -ForegroundColor Green
    Write-Host "组合唯一标识: $uniqueID" -ForegroundColor Yellow
    return $uniqueID
}
# 获取IP和MAC地址
function Get-NetworkInfo {
    $networkAdapter = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Select-Object -First 1
    $ipConfig = Get-NetIPAddress -InterfaceIndex $networkAdapter.ifIndex -AddressFamily IPv4
    Write-Host "IP地址: $($ipConfig.IPAddress)"
    Write-Host "MAC地址: $($networkAdapter.MacAddress)"
}
# 执行
Get-MachineGUID
Get-NetworkInfo

VBScript 脚本

' 获取计算机唯一标识
Option Explicit
Dim objWMIService, objItem, colItems
Dim ComputerName, CPUID, MBID, MACID
ComputerName = "Computer: " & CreateObject("WScript.Network").ComputerName
' 获取CPU
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)
For Each objItem in colItems
    CPUID = "CPU ID: " & objItem.ProcessorId
Next
' 获取主板
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard",,48)
For Each objItem in colItems
    MBID = "Motherboard SN: " & objItem.SerialNumber
Next
' 获取MAC地址
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True",,48)
For Each objItem in colItems
    If Not IsNull(objItem.MACAddress) Then
        MACID = "MAC: " & objItem.MACAddress
        Exit For
    End If
Next
WScript.Echo ComputerName
WScript.Echo CPUID
WScript.Echo MBID
WScript.Echo MACID

Python 脚本 (跨平台)

import platform
import uuid
import subprocess
import hashlib
import socket
def get_machine_id():
    """获取系统唯一标识"""
    info = {}
    # 1. 获取系统信息
    info['system'] = platform.system()
    info['node'] = platform.node()
    info['release'] = platform.release()
    # 2. 获取硬件信息
    try:
        # Linux/macOS
        if platform.system() == "Linux":
            result = subprocess.run(['cat', '/etc/machine-id'], capture_output=True)
            info['machine_id'] = result.stdout.decode().strip()
        elif platform.system() == "Darwin":
            result = subprocess.run(['ioreg', '-rd1', '-c', 'IOPlatformExpertDevice'], capture_output=True)
            info['machine_id'] = result.stdout.decode().strip()
        elif platform.system() == "Windows":
            result = subprocess.run(['wmic', 'csproduct', 'get', 'uuid'], capture_output=True)
            info['machine_id'] = result.stdout.decode().strip().split('\n')[1].strip()
    except:
        info['machine_id'] = str(uuid.getnode())
    # 3. MAC地址
    info['mac_address'] = ':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff) 
                                   for elements in range(0,2*6,2)][::-1])
    # 4. 生成唯一标识(哈希处理)
    unique_string = f"{info['machine_id']}-{info['mac_address']}-{info['node']}"
    info['unique_id'] = hashlib.md5(unique_string.encode()).hexdigest()
    return info
# 执行示例
if __name__ == "__main__":
    info = get_machine_id()
    print("="*40)
    print("系统: ", info['system'])
    print("计算机名: ", info['node'])
    print("系统版本: ", info['release'])
    print("机器ID: ", info['machine_id'])
    print("MAC地址: ", info['mac_address'])
    print("唯一标识: ", info['unique_id'])
    print("="*40)

Linux/Unix 脚本

#!/bin/bash
# 获取 Linux 系统唯一标识
echo "===== 系统唯一标识 ====="
echo
# 方法1: 使用 /etc/machine-id
echo "Machine ID: $(cat /etc/machine-id)"
# 方法2: 使用 dmidecode 获取硬件信息
echo "主板序列号: $(sudo dmidecode -s baseboard-serial-number)"
echo "系统序列号: $(sudo dmidecode -s system-serial-number)"
# 方法3: 组合生成唯一标识
CPU_INFO=$(cat /proc/cpuinfo | grep 'model name' | uniq)
DISK_SN=$(lsblk -no serial /dev/sda)
MACHINE_ID=$(cat /etc/machine-id)
FINGERPRINT=$(echo "$MACHINE_ID-$DISK_SN" | md5sum | cut -d' ' -f1)
echo "CPU信息: $CPU_INFO"
echo "硬盘序列号: $DISK_SN"
echo "唯一指纹: $FINGERPRINT"

推荐的完整方案 (PowerShell)

# 生成稳定的机器指纹
function Get-HardwareFingerprint {
    $fingerprint = @()
    # 收集基础信息
    $fingerprint += $env:COMPUTERNAME
    $fingerprint += (Get-WmiObject Win32_BIOS).SerialNumber
    $fingerprint += (Get-WmiObject Win32_BaseBoard).SerialNumber
    $fingerprint += (Get-WmiObject Win32_Processor).ProcessorId
    # 获取第一个物理硬盘序列号
    $disk = Get-WmiObject Win32_DiskDrive | Where-Object {$_.InterfaceType -ne "USB"} | Select-Object -First 1
    $fingerprint += $disk.SerialNumber
    # 生成哈希值作为唯一标识
    $hashString = $fingerprint -join "-"
    $sha256 = [System.Security.Cryptography.SHA256]::Create()
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($hashString)
    $hash = $sha256.ComputeHash($bytes)
    return [Convert]::ToHexString($hash)
}
Write-Host "本机唯一标识: $(Get-HardwareFingerprint)" -ForegroundColor Cyan

注意事项

  1. WMI可能需要管理员权限 - 某些信息只能在管理员模式下获取
  2. 虚拟机会有不同标识 - VM中获取的唯一标识可能与物理机不同
  3. 硬件更换 - 如果更换硬件,标识可能会变化
  4. 隐私考虑 - 唯一标识可能包含敏感信息,请注意数据保护

建议使用多种硬件信息的组合(如CPU+主板+硬盘序列号)生成唯一标识,这样既相对稳定又不容易被伪造。

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