Доступ к значениям ключа реестра HKLM с использованием WQL - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь получить доступ к версии приложения, используя его код продукта.Мы можем достичь выше, используя-

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

, где EC542D5D-B608-4145-12F7-749C02B23494 - это код продукта.Но я должен написать это как WMI Query (необходимый для 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" />

Так что я не могу получить версию, используя реестр (HKLM Unsinstall path), который также принимается SCY.

PS Класс Win32_product занимает много времени, поэтому этого избегают.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

SCUP использует XML-схему WSUS, в частности схему BaseApplicabilityRules .Вы можете выбрать любой из типов, описанных на этой странице.У них разные правила для разных сценариев, таких как WMI Query, сведения о файлах и запросы реестра.Если вы ищете сравнение версий из реестра, лучшим выбором будет 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
  • EqualTo
  • GreaterThanOrEqualTo
  • GreaterThan

RegType32 is,по умолчанию false, поэтому вы можете оставить его, если захотите.Если раздел реестра связан с 32-разрядной записью, измените этот атрибут на true или жесткий код с путем «WOW6432Node».

Данные Атрибут является целевым номером версии для сравнения (в стандартном формате номера версии из четырех частей).

0 голосов
/ 18 декабря 2018

Поскольку Win32_Product, как правило, является классом, которого следует избегать, SCCM вводит свои собственные классы для этой цели:

Win32Reg_AddRemovePrograms
Win32Reg_AddRemovePrograms64

Должен быть возможен запрос к одному из таких, как этот

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