Какая библиотека для Powershell 6 содержит команду get-wmiobject?

Я получаю следующую ошибку при попытке использовать get-WmiObject команда в PowerShell (версия 6):

PS C:\Users\zsofi> Get-WmiObject Win32_product | select name, packagecache

Get-WmiObject : The term 'Get-WmiObject' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Get-WmiObject Win32_product | select name, packagecache
+ ~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (Get-WmiObject:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException`

2 ответа

Полезный ответ Герта Яна Краайевельда предлагает решение для командлетов, которые действительно доступны только в Windows PowerShell (не также в PowerShell Core).

Однако в данном конкретном случае, как отмечает Lee_Daily в комментарии, вы можете использовать Get-CimInstance Командлет, который доступен в PowerShell Core (v6+):

Get-CImInstance CIM_Product | Select-Object Name, PackageCache

Обратите внимание CIM_Product название класса; Классы CIM обычно имеют те же свойства, что и их WMI Win32_* двойники.

На самом деле, желательно использовать CIM ( *-Cim* ) командлеты даже в Windows PowerShell, потому что WMI (*-Wmi*) командлеты устарели с момента появления командлетов CIM в версии 3; от Get-CimInstance документы:

Начиная с Windows PowerShell 3.0, этот командлет был заменен Get-CimInstance,

Что касается того, почему командлеты CIM являются лучшим выбором (цитата из этого блога TechNet):

Большой недостаток командлетов WMI заключается в том, что они используют DCOM для доступа к удаленным компьютерам. DCOM не дружествен к брандмауэрам, может быть заблокирован сетевым оборудованием и дает некоторые тайные ошибки, когда что-то идет не так.

В том же сообщении в блоге также описывается использование командлетов CIM:

  • использовать тот же основанный на стандартах механизм удаленного взаимодействия, что и сам PowerShell ( WS-Management)

  • есть поддержка для сессий

  • функционируют немного иначе, чем их устаревшие аналоги WMI в том смысле, что они не имеют методов напрямую; методы должны быть вызваны с Invoke-CimMethod,

Насколько я знаю, единственным способом является модуль совместимости. Это очень аккуратный модуль от Microsoft, который фактически делает командлеты Windows PS доступными в PS Core посредством неявного удаленного взаимодействия с сеансом Windows Powershell 5.1 на той же машине. https://github.com/PowerShell/WindowsCompatibility

Другие вопросы по тегам