我正在尝试提取Windows许可证类型,我可以使用以下命令来完成,但是要花很多时间,有没有更快的PowerShell命令来完成此操作?
有关我已尝试过的操作,请参见下面的代码。
(Get-CimInstance SoftwareLicensingProduct |
Where-Object -FilterScript { ($_.Description -like "W*" -and $_.licensestatus -eq 1 ) } |
Select-Object -first 1 -ExpandProperty Description ) -replace '.*(VOLUME_MAK|OEM_SLP|RETAIL|OEM_COA_NSLP|OEM_COA_SLP).*', '$1'
我得到了预期的结果,但是很慢。
答案 0 :(得分:1)
在Cim实例级别的查询比在PowerShell中更快。
在您的代码中,您将获取与SoftwareLicensingProduct相关的整个CimInstance,然后在Powershell中过滤所有内容(使用where-object),而您可以使用-filter
参数并在CimInstance级别进行过滤,即更快。
尝试一下:
Get-CimInstance softwarelicensingproduct -filter 'Description LIKE "W%" AND LicenseStatus = 1' |
Select-Object -first 1 -ExpandProperty Description ) -replace '.*(VOLUME_MAK|OEM_SLP|RETAIL|OEM_COA_NSLP|OEM_COA_SLP).*', '$1'
您可以使用filter参数来获得更窄的结果。在此处查看有关WQL and WMI
的更多帮助答案 1 :(得分:1)
Get-CimInstance
具有一个-Filter
参数,该参数接受WQL查询过滤器:
$SLP = Get-CimInstance SoftwareLicensingProduct -Filter 'Description LIKE "Windows%" AND LicenseStatus = 1'
$SLP.Description -replace '.*(VOLUME_MAK|OEM_SLP|RETAIL|OEM_COA_NSLP|OEM_COA_SLP).*', '$1'
这可能比让Get-CimInstance
返回 all 个实例并对其进行 then 筛选要快。
您可能想将VOLUME_KMSCLIENT
添加到正则表达式模式中:-)