Powershell 6的哪个库包含get-wmiobject命令?

zbdgwd5y  于 2023-03-30  发布在  Shell
关注(0)|答案(2)|浏览(159)

我在PowerShell(版本6)中尝试使用get-WmiObject命令时收到以下错误:

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`
pod7payv

pod7payv1#

Gert Jan Kraaijeveld's helpful answer为cmdlet提供了一个解决方案,该解决方案实际上仅在 Windows PowerShell 中可用(在PowerShell [Core] 6+中不可用)。
然而,在这种特殊情况下,正如Lee_Dailey在注解中所指出的,您可以使用
Get-CimInstance cmdlet
,PowerShell [Core] 6+中***也提供***:

Get-CimInstance CIM_Product | Select-Object Name, PackageCache

注意CIM_Product类名;CIM类通常具有与其对应的WMI Win32_*相同的属性。

为什么通常应使用CIM cmdlet而不是WMI cmdlet:

在PowerShell Core 中,所有未来的开发工作都将进行,CIM cmdlet是您唯一的选择,但即使在 Windows PowerShell中也建议使用CIM(*-Cim*)cmdlet,因为当引入CIM cmdlet时,WMI(*-Wmi*)cmdlet在PowerShell版本3(2012年9月发布)中已 * 弃用 ;关于Get-CimInstance docs
从Windows PowerShell 3.0开始,此cmdlet已被Get-CimInstance取代。
至于
为什么 * CIM cmdlet是更好的选择(引用自this TechNet blog post):
WMI cmdlet的最大缺点是它们使用DCOM来访问远程计算机。DCOM对防火墙不友好,可能被网络设备阻止,并且在出错时给出一些《双城之战》的错误。
同一篇博客文章还描述了CIM cmdlet如何:

*使用与PowerShell本身相同的 * 基于标准的远程处理 * 机制WS-Management,通过其Windows实现,WinRM

  • 也就是说,为PowerShell远程处理(请参阅about_Remote_Requirements)设置的计算机隐式支持通过CIM cmdlet进行目标设定。
  • 但是,您仍然可以使用New-CimSessionOption cmdlet在选择加入的基础上使用DCOM协议(就像WMI cmdlet所做的那样)。
  • 支持会话
    *函数稍微不同比他们过时的WMI对应的对象返回没有直接的方法;**方法必须通过Invoke-CimMethod**调用。
rxztt3cl

rxztt3cl2#

据我所知,唯一的方法是兼容性模块。这是Microsoft的一个非常简洁的模块,它实际上通过隐式远程处理到同一台机器上的Windows Powershell 5.1会话,使Windows PS cmdlet在PS Core中可用。https://github.com/PowerShell/WindowsCompatibility

相关问题