24

I am getting the following error upon attempting to use the get-WmiObject command in PowerShell (version 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
  • 3
    according to the MSDocs site The requested page is not available for PowerShell 6. You have been redirected to the newest product version this page is available for. ... and that "highest version" is 5.1 at this time. from what i can tell, tho, you otta be able to use the Get-CimInstance cmdlets - Get-CimInstance (CimCmdlets) | Microsoft Docs — learn.microsoft.com/en-us/powershell/module/cimcmdlets/… Commented Feb 2, 2019 at 18:39
  • I see the problem exists only on Windows 10, and not on Windows 11 or 2025! All three have same version of PowerShell (7.4.5), but on newer OS, Get-WmiObject works fine! Commented Oct 17, 2024 at 12:03

2 Answers 2

37

Gert Jan Kraaijeveld's helpful answer offers a solution for cmdlets that truly are available only in Windows PowerShell (not also in PowerShell (Core) 7).

In this particular case, however, as Lee Dailey notes in a comment on the question, you can use the Get-CimInstance cmdlet, which is available in PowerShell (Core) 7 too:

Get-CimInstance CIM_Product | Select-Object Name, PackageCache

Note the CIM_Product class name; CIM classes typically have the same properties as their WMI Win32_* counterparts.


Why you should generally use the CIM cmdlets instead of the WMI cmdlets:

In PowerShell (Core) 7, where all future development effort will go, the CIM cmdlets are your only option, but it is advisable to use the CIM (*-Cim*) cmdlets even in Windows PowerShell, because the WMI (*-Wmi*) cmdlets were deprecated in PowerShell version 3 (released in September 2012), when the CIM cmdlets were introduced; from the
Get-CimInstance docs:

Starting in Windows PowerShell 3.0, this cmdlet has been superseded by Get-CimInstance.

As for why the CIM cmdlets are the better choice (quoted from this TechNet blog post):

The big drawback to the WMI cmdlets is that they use DCOM to access remote machines. DCOM isn’t firewall friendly, can be blocked by networking equipment, and gives some arcane errors when things go wrong.

The same blog post also describes how the CIM cmdlets:

  • use the same standards-based remoting mechanism as PowerShell itself (WS-Management, via its Windows implementation, WinRM)

    • That is, computers that are set up for PowerShell remoting (see about_Remote_Requirements) implicitly support targeting via the CIM cmdlets.

    • However, you can still use the DCOM protocol (like the WMI cmdlets did) on an opt-in basis, using the New-CimSessionOption cmdlet.

  • have support for sessions

  • function slightly differently than their obsolete WMI counterparts in that the objects returned do not have methods directly; methods must be called via Invoke-CimMethod and deleting instances requires Remove-CimInstance.

Sign up to request clarification or add additional context in comments.

Comments

8

As far as I know the only way is the Compatibility module. This is a very neat module by Microsoft that actually makes Windows PS cmdlets available in PS Core by means of implicit remoting to a Windows Powershell 5.1 session on the same machine. https://github.com/PowerShell/WindowsCompatibility

1 Comment

Note that that project points to an RFC in the main PowerShell project that claims the module been added to PowerShell v7 so that an import is no longer necessary. (And the project has fittingly been archived.) I'm still grokking how to use the compatibility feature.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.