Я пытаюсь использовать Windows PowerShell 2.0 для поиска установленного приложения. Я пробовал два метода, один с использованием WMI и один с использованием реестра. Оба метода способны вызвать большой список установленных приложений и компонентов, однако ни один из них не вызывает интересующее меня приложение.
Я специально ищу CruiseControl.NET. Он отображается в списке приложений в апплете панели управления «Программы и компоненты». Я точно знаю, что он в настоящее время установлен, так как я просто удалил и переустановил его, чтобы начать все заново. Однако ни один из следующих методов не работает (они успешны, но не дают результатов):
Подход к поиску в реестре
Ищет в реестре HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
ключи приложений. Возвращает много, если я уберу , где , но в нем отсутствует довольно много приложений, которые появляются в панели управления программами и функциями Windows.
gci "hklm:\software\microsoft\windows\currentversion\uninstall"
| foreach { gp $_.PSPath }
| select DisplayVersion,InstallDate,ModifyPath,Publisher,UninstallString,Language,DisplayName
| where { $_.DisplayName -match "^Cruise*" }
Подход WMI
Также возвращает много, однако, основываясь на документации для объекта Win32_Product, они являются только установленными приложениями MSI. Многие приложения отсутствуют, я думаю, потому что они не MSI. Установщик CruiseControl.NET - это NSIS (установочная система NullSoft) ... поскольку он здесь не отображается, я предполагаю, что он вообще не использует MSI, однако мне интересно, есть ли другой способ использовать WMI для найти ЛЮБЫЕ / ВСЕ установленные приложения, независимо от того, использовали они MSI или нет.
gwmi -namespace "root\cimv2" -class "Win32_Product"
| select Name,Vendor,Version,IdentifyingNumber
| where { $_.Name -match "^Cruise*" }
Поиск приложения через реестр на самом деле не очень мне помогает. Если только это не обеспечивает некоторый способ найти деинсталлятор приложений и правильные параметры, чтобы вызвать его, что не всегда имеет место. Я бы предпочел использовать WMI для поиска и удаления приложений, которые нужно удалить, поскольку это не только позволило бы мне использовать единый интерфейс управления для всех моих сценариев (WMI), но и другим было бы легко выяснить, как поддерживать сценарии в будущем, поскольку WMI, как правило, хорошо документирована.