使用WQL访问HKLM注册表键值

时间:2018-12-18 09:55:21

标签: registry wmi sccm wql

我正在尝试使用产品代码访问应用程序的版本。 我们可以使用-

(Get-ItemProperty -path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{EC542D5D-B608-4145-12F7-749C02B23494}').displayversion

其中EC542D5D-B608-4145-12F7-749C02B23494是产品代码。 但是我必须将其编写为WMI查询(SCCM所需)。 SCUP不接受此查询。 其他机制很少,但是在获取版本中没有任何作用。 范例-  1. PatchMyPC的目录使用“路径”属性,但是在我的情况下,我需要从注册表中获取。因此,如果我将路径设置为“ HKLM:\ SOFTWARE \ Microsoft ..........,则显示错误。

<bar:FileExists Path="7-Zip\7zFM.exe" Csidl="38" />
              <bar:FileVersion Path="7-Zip\7zFM.exe" Comparison="LessThan" Version="18.01.0.0" Csidl="38" />

所以我无法使用SCUP接受的注册表(HKLM卸载路径)来获取版本。

PS Win32_product类花费大量时间,因此可以避免这种情况。

2 个答案:

答案 0 :(得分:0)

由于通常应避免使用Win32_Product,因此SCCM为此引入了自己的类:

Win32Reg_AddRemovePrograms
Win32Reg_AddRemovePrograms64

应该可以查询这样的一个人

select Version from Win32Reg_AddRemovePrograms where ProdID = '{EC542D5D-B608-4145-12F7-749C02B23494}'

答案 1 :(得分:0)

SCUP使用WSUS XML架构,特别是BaseApplicabilityRules架构。您可以选择该页面上记录的任何类型。它们针对不同的场景(例如WMI查询,文件详细信息和注册表查询)具有不同的规则。如果要从注册表中查找版本比较,最好的选择是RegSzToVersion。根据您的问题,您将使用类似的

<bar:RegSzToVersion Key="HKEY_LOCAL_MACHINE" Subkey="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{EC542D5D-B608-4145-12F7-749C02B23494}" Value="DisplayVersion" RegType32="false" Comparison="LessThan" Data="1.0.0.0" />

比较 可以是以下任意值

  • LessThan
  • LessThanOrEqualTo
  • 等于
  • GreaterThanOrEqualTo
  • GreaterThan

RegType32 默认情况下为false,因此可以根据需要将其省略。如果注册表项与32位条目相关联,请使用“ WOW6432Node”路径将该属性更改为true或硬编码。

数据 属性是要比较的目标版本号(标准的四部分版本号格式)。

相关问题