我正在尝试拉取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'
我得到了预期的结果,但速度很慢。
发布于 2019-06-25 21:14:21
Get-CimInstance
有一个接受WQL查询过滤器的-Filter
参数:
$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
返回所有实例然后对其进行过滤更快。
您可能希望将VOLUME_KMSCLIENT
添加到正则表达式模式:-)
发布于 2019-06-25 21:14:12
Cim实例级别的查询速度比PowerShell级别的查询速度快。
在您的代码中,您将获得与SoftwareLicensingProduct相关的整个对象,然后在Powershell中过滤它们(使用where- CimInstance ),而您可以在CimInstance级别使用-filter
参数和过滤器,这会更快。
试试这个:
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的更多帮助
https://stackoverflow.com/questions/56754546
复制相似问题