2024年12月

Powweshell脚本判断主板序列号
如果主板没有,则使用其他服务器

# 在当前 PowerShell 会话中,绕过执行策略限制,此设置仅对当前会话有效,一旦关闭 PowerShell 窗口,设置将失效
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

# 获取软件许可服务的信息
$licenseService = Get-CimInstance -ClassName SoftwareLicensingService

# 检查是否存在原始产品密钥
if ($licenseService.OA3xOriginalProductKey) {
    try {
        # 如果存在,设置产品密钥
        & C:\Windows\System32\slmgr.vbs /ipk $licenseService.OA3xOriginalProductKey -ErrorAction Stop
        Write-Host "产品密钥已成功设置。"
    } catch {
        # 捕获设置产品密钥时的异常
        Write-Host "设置产品密钥时出错:$_"
    }
} else {
    # 如果不存在,设置 KMS 服务器
    Write-Host "OA3xOriginalProductKey 不存在,正在设置 KMS 服务器..."
    try {
        # 替换为实际的 KMS 服务器地址
        $kmsServer = "your-kms-server-address"  
        & C:\Windows\System32\slmgr.vbs -skms $kmsServer -ErrorAction Stop
        Write-Host "KMS 服务器设置成功。"
    } catch {
        # 捕获设置 KMS 服务器时的异常
        Write-Host "设置 KMS 服务器时出错:$_"
    }
}

# 最后激活 Windows
try {
    & C:\Windows\System32\slmgr.vbs /ato -ErrorAction Stop
    Write-Host "Windows 已成功激活。"
} catch {
    # 捕获激活 Windows 时的异常
    Write-Host "激活 Windows 时出错:$_"
}

批处理脚本
24H2默认好像没有启用wmic,建议使用Powershell脚本

@echo off
title 自动判断使用主板自带序列号还是KMS激活Windows

setlocal

:: 卸载现有的产品密钥
echo 卸载现有的产品密钥...
slmgr /upk

:: 检查是否存在 OA3xOriginalProductKey
for /f "tokens=2 delims==" %%i in ('wmic path softwarelicensingservice get OA3xOriginalProductKey /format:list ^| find "="') do (
    set "productKey=%%i"
)

if defined productKey (
    :: 如果存在 OA3xOriginalProductKey,安装该产品密钥
    echo 找到 OA3xOriginalProductKey,正在安装产品密钥...
    slmgr /ipk %productKey%
) else (
    :: 如果不存在 OA3xOriginalProductKey,设置 KMS 服务器
    echo 未找到 OA3xOriginalProductKey,正在设置 KMS 服务器...
    slmgr.vbs -skms your-kms-server-address
)

:: 激活Windows
echo 正在激活 Windows...
slmgr /ato

endlocal