bmo*_*a18 1 windows powershell wmi wmic
在powershell上,我正在执行以下命令:
$objWMI = wmic product where "name like 'app' " get PackageCache
echo $objWMI
Run Code Online (Sandbox Code Playgroud)
输出:
PackageCache
C:\Windows\Installer\file.msi
Run Code Online (Sandbox Code Playgroud)
我只需要转换这个输出来显示这个目录。
Colin 的有用回答提供了一个有效的解决方案,尽管使用不同的方法有两个很好的理由:
该wmic.exeCLI被弃用(因为是PowerShell的*-Wmi*cmdlet的如Get-WmiObject)
作为外部程序,它只能与 PowerShell通信文本,然后需要解析该文本以获取感兴趣的信息,这既麻烦又脆弱。
使用Get-CimInstancecmdlet可以避免这两个问题:CIM cmdlet 是与 WMI 交互的推荐方式,并且作为本机 PowerShell cmdlet,Get-CimInstance返回对象而不是文本,您可以以稳健的方式访问其属性:
# Get the Win32_Product instance of interest and output its
# .PackageCache propertly value.
(Get-CimInstance Win32_Product -Filter 'Name like "app"').PackageCache
Run Code Online (Sandbox Code Playgroud)
上面直接输出一个字符串如C:\Windows\Installer\file.msi; 简单地预先添加一些类似于$packagePath = 在变量中捕获它的东西。
警告:
Win32_Product如果可能,应避免使用CIM/WMI 类,因为它的使用速度过慢并且可能会产生副作用(强调已添加):
Win32_product 类不是查询优化的。诸如“select * from Win32_Product where (name like 'Sniffer%')”之类的查询要求 WMI 使用 MSI 提供程序枚举所有已安装的产品,然后依次解析完整列表以处理“where”子句。此过程还会启动对已安装软件包的一致性检查、验证和修复安装。使用只有用户权限的帐户,因为用户帐户可能无法访问很多位置,可能会导致应用程序启动延迟和说明安装失败的事件 11708。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |