Работа с программами установки программного обеспечения
Приложения, установленные с установщиком Windows, можно найти через запросы WMI, но не все приложения используют установщик Windows. Конкретные методы поиска приложений, установленных с другими инструментами, зависят от программного обеспечения установщика.
Например, приложения, установленные путем копирования файлов в папку на компьютере, обычно не могут управляться с помощью методов, описанных здесь. Эти приложения можно управлять файлами и папками с помощью методов, описанных в разделе "Работа с файлами и папками".
Для программного обеспечения, установленного с помощью пакета установщика, установщик Windows можно найти с помощью Win32Reg_AddRemovePrograms или классов Win32_Product . Однако оба из них имеют проблемы. Win32Reg_AddRemovePrograms доступен только в том случае, если вы используете System Center Configuration Manager (SCCM). И класс Win32_Product может быть медленным и имеет побочные эффекты.
Внимание
Класс Win32_Product не оптимизирован для запросов. Если выполняются запросы, использующие фильтры с подстановочными знаками, то WMI будет использовать поставщика MSI для перечисления всех установленных продуктов, а затем последовательно проанализирует весь список с применением фильтра. При этом также инициируется проверка согласованности установленных пакетов для проверки и исправления установки. Проверка выполняется медленно и может привести к ошибкам в журнале событий. Подробные сведения см. в статье базы знаний 974524.
В этой статье представлен альтернативный метод поиска установленного программного обеспечения.
Запрос раздела реестра "Удаление" для поиска установленного программного обеспечения
Так как большинство стандартных приложений регистрируют программу удаления в Windows, с ними можно работать локально, в реестре Windows. Не существует гарантированного способа найти все приложения в системе. Однако можно найти все программы со списками, отображаемыми в разделе "Добавление или удаление программ " в следующем разделе реестра:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
.
Мы можем найти количество установленных приложений, подсчитывая количество разделов реестра:
$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
(Get-ChildItem -Path $UninstallPath).Count
459
Мы можем искать этот список приложений дальше с помощью различных методов. Чтобы отобразить значения значений реестра в разделах реестра Uninstall
, используйте GetValue()
метод разделов реестра. Значение метода является записью реестра. Например, чтобы найти отображаемые имена приложений в Uninstall
ключе, используйте следующую команду:
Get-ChildItem -Path $UninstallPath |
ForEach-Object -Process { $_.GetValue('DisplayName') } |
Sort-Object
Примечание.
Нет никакой гарантии, что значения DisplayName уникальны.
Следующий пример создает выходные данные, аналогичные классу Win32Reg_AddRemovePrograms :
Get-ChildItem $UninstallPath |
ForEach-Object {
$ProdID = ($_.Name -split '\\')[-1]
Get-ItemProperty -Path "$UninstallPath\$ProdID" -ea SilentlyContinue |
Select-Object -Property DisplayName, InstallDate, @{n='ProdID'; e={$ProdID}}, Publisher, DisplayVersion
} | Select-Object -First 3
Для краткости в этом примере используется Select-Object
ограничение количества возвращаемых элементов до трех.
DisplayName : 7-Zip 22.01 (x64)
InstallDate :
ProdID : 7-Zip
Publisher : Igor Pavlov
DisplayVersion : 22.01
DisplayName : AutoHotkey 1.1.33.10
InstallDate :
ProdID : AutoHotkey
Publisher : Lexikos
DisplayVersion : 1.1.33.10
DisplayName : Beyond Compare 4.4.6
InstallDate : 20230310
ProdID : BeyondCompare4_is1
Publisher : Scooter Software
DisplayVersion : 4.4.6.27483
PowerShell