Какая библиотека для 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