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