You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过WMI判断Windows机器是否通过Active Directory激活以跳过CAC离线激活工具?

如何通过WMI判断Windows机器是否通过Active Directory激活以跳过CAC离线激活工具?

嘿,我懂你遇到的坑了——之前查到的ActivationMethod属性确实不存在于SoftwareLicensingService类里,白忙活一场对吧?别担心,咱们换个靠谱的路子,用SoftwareLicensingProduct这个WMI类就能准确判断。

这个类里记录了系统的激活状态和激活方式相关的关键信息,咱们可以通过它来筛选出已激活且是AD域激活的机器:

首先,先运行这条命令查看激活详情:

Get-WmiObject -Class SoftwareLicensingProduct | Where-Object {
    $_.PartialProductKey -ne $null -and $_.LicenseStatus -eq 1
} | Select-Object -Property Name, Description, LicenseStatus, ProductKeyChannel

这里解释下几个关键条件:

  • PartialProductKey -ne $null:过滤掉那些没有安装密钥的无效条目
  • LicenseStatus -eq 1:表示系统已经激活(状态1就是激活成功)

接下来看结果里的字段:

  • 如果是AD域激活的机器,Description字段里会明确包含Active Directory-Based Activation的字样,这个判断最直接精准
  • 另外,ProductKeyChannel通常会显示为Volume:GVLK(因为AD激活属于批量激活的域集成KMS模式,GVLK是KMS客户端密钥)

把这个逻辑写到你的脚本里就很简单了,比如:

# 检查是否为AD激活的已激活机器
$isADActivated = Get-WmiObject -Class SoftwareLicensingProduct | Where-Object {
    $_.PartialProductKey -ne $null -and 
    $_.LicenseStatus -eq 1 -and 
    $_.Description -match 'Active Directory-Based Activation'
}

if ($isADActivated) {
    Write-Host "目标机器已通过AD激活,跳过CAC离线激活工具"
    # 这里添加跳过工具的逻辑
} else {
    Write-Host "目标机器未通过AD激活,执行CAC离线激活工具"
    # 这里添加运行工具的逻辑
}

要是你觉得匹配描述有点麻烦,用ProductKeyChannel匹配Volume:GVLK也能达到目的,不过用描述判断更精准——毕竟有些独立KMS服务器激活的机器也会用GVLK,但AD激活的描述是独有的。

备注:内容来源于stack exchange,提问作者Sigshane

火山引擎 最新活动