我们有一个小型网络(约 150 台台式机,约 20 台服务器),其中大部分是 Linux。微软一直想每 3 年左右审核一次我们的微软产品。我真的没有时间去 80-90 台台式机并抄下 Win 激活密钥,然后关联微软软件许可密钥。
有没有办法使用 Active Directory 获取此信息?也许使用 PowerShell?
提前致谢。
答案1
通用解决方案:
我认为以微软为中心的解决方案是使用许可音量键,然后只需使用您的KMS 服务器报告许可证激活状态。
Windows 7 及以上版本-解决方案
如果批量许可不是一种选择,并且您的所有客户端都是 Windows 7 或更高版本,您可以查询SoftwareLicensingProduct
WMI 类在每台机器上检索许可详细信息,下面是使用 PowerShell 和 AD 的示例:
$Clients = Get-ADComputer -LDAPFilter "(&(operatingSystem=*Windows*))"
$LicenseQuery = "SELECT ApplicationID,Name,Description,ProductKeyID,PartialProductKey FROM SoftwareLicensingProduct WHERE LicenseStatus = 1"
foreach($Client in $Clients){
$ActiveLicenses = @(Get-WmiObject -Query $LicenseQuery -ComputerName $Client.Name)
if($ActiveLicense.Count -le 1){
Write-Warning "Unable to find active license for computer $($Client.Name)"
}
# Do what you want with the license information here
}
它将需要一些错误处理和输出逻辑(如果您愿意,可以将详细信息导出到 CSV 文件),但这会让您朝着正确的方向前进。
我在查询中包含的属性应该足以进行审计,但如果有疑问,请咨询微软
答案2
我们部署了 OCS Inventory。它是免费的,非常棒,并且提供了您需要的所有信息。
答案3
答案4
我们的处理方式是,我们的 PowerShell 启动脚本使用 NirSoft ProduKey 从系统中提取信息,并将数据上传到文件共享。我们已经使用 PowerShell 启动脚本来管理许多管理任务,因此添加另一个步骤很容易。
每当我对许可证有疑问时,我只需 grep 上传的报告并确保计数匹配,检查重复的密钥等。
起初,我使用 PowerShell 脚本手动抓取 WMI 和注册表来获取此信息,但有几个特殊情况,NirSoft 的工具比我自己开发的工具处理得更好。