我们的环境具有不同的域和森林,有信任和无信任。
我需要使用KMS来管理这些许可证。
我想找出没有激活或使用Grace期限运行的服务器。
我一直在尝试使用WMIC和Powershell的不同脚本。但是,不能生成清晰干净的。
以下是尝试过的脚本。我需要帮助。
来自WMIC:
WMIC /Output:@D:\output.txt /node:@D:\serverslist.txt PATH SoftwareLicensingProduct WHERE "ProductKeyID like '%-%' AND Description like '%Windows%'" get LicenseStatus
来自Powershell:
PS C:\Windows\system32> Get-CimInstance -ClassName SoftwareLicensingProduct |where PartialProductKey |select PScomputername,LicenseStatus
我需要帮助来生成一个包含计算机名称/ IP和许可证状态的表。
提前致谢。
答案 0 :(得分:3)
在这里,我做了一些调整。
首先,你的代码将LicenseStatus作为一个数字返回......这是正常的,但为了得到一些真正令人惊叹的因素,我咨询了this chart from MSDN on what the numbers mean,并将其与一个Switch语句一起用于一个Calulated Property中用人类有意义的许可证状态替换号码,给我们这样的逻辑:
select Pscomputername,Name,@{Name='LicenseStatus';Exp={
switch ($_.LicenseStatus)
{
0 {'Unlicensed'}
1 {'licensed'}
2 {'OOBGrace'}
3 {'OOTGrace'}
4 {'NonGenuineGrace'}
5 {'Notification'}
6 {'ExtendedGrace'}
Default {'Undetected'}
}
#EndofCalulatedProperty
}}
这为我们提供了完整的代码,同样也提取了产品的名称。您只需将其名称添加到-ComputerName属性即可对多个系统运行:
Get-CimInstance -ClassName SoftwareLicensingProduct -computerName localhost,dc01,windows10 |
where PartialProductKey | select Pscomputername,Name,@{Name='LicenseStatus';Exp={
switch ($_.LicenseStatus)
{
0 {'Unlicensed'}
1 {'licensed'}
2 {'OOBGrace'}
3 {'OOTGrace'}
4 {'NonGenuineGrace'}
5 {'Notification'}
6 {'ExtendedGrace'}
Default {'Undetected'}
}
#EndOfCaltulatedProperty
}}
这会给你这样的结果:
PSComputerName Name LicenseStatus
-------------- ---- -------------
localhost Office 15, OfficeProPlusVL_MAK edition licensed
localhost Windows(R), ServerDatacenter edition licensed
dc01 Windows(R), ServerStandard edition licensed
Windows10 Windows(R), ServerStandard edition licensed
答案 1 :(得分:1)
您也可以尝试
$activation = (Get-CimInstance -ClassName SoftwareLicensingProduct | where ApplicationId -EQ 55c92734-d682-4d71-983e-d6ec3f16059f | where PartialProductKey).LicenseStatus
答案 2 :(得分:0)
Get-CimInstance -ClassName SoftwareLicensingProduct |
where PartialProductKey |
select Name, ApplicationId, LicenseStatus