PowerShell Windows许可证类型

时间:2019-06-25 12:52:51

标签: windows powershell

我正在尝试提取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'

我得到了预期的结果,但是很慢。

2 个答案:

答案 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添加到正则表达式模式中:-)