Какая библиотека для Powershell 6 содержит команду get-wmiobject? - PullRequest
0 голосов
/ 02 февраля 2019

При попытке использовать команду 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 ]

0 голосов
/ 04 февраля 2019

Полезный ответ Герта Яна Краайевельда предлагает решение для командлетов, которые действительно доступны только в 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 не дружествен к брандмауэру, может быть заблокирован сетевым оборудованием и дает некоторые загадочные ошибки, когда что-то идет не так.

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

имеют поддержку для сессий

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

0 голосов
/ 02 февраля 2019

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

...