Тип лицензии Windows PowerShell - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь получить тип лицензии 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 ]

1 голос
/ 25 июня 2019

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 вернуть все экземпляров и , а затем отфильтровать их.

Вы можете добавить VOLUME_KMSCLIENT к шаблону регулярных выражений: -)

1 голос
/ 25 июня 2019

Запросы на уровне экземпляра Cim выполняются быстрее, чем в PowerShell.

В своем коде вы получаете весь CimInstance, связанный с SoftwareLicensingProduct, и затем фильтруете их все (используя where-object) в Powershell, тогда как вы можете использовать параметр -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'

Вы можете поиграться с параметром фильтра и получить более узкие результаты. Для получения дополнительной помощи по WQL и WMI

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...