Share via


Trabalhar com instalações de software

Os aplicativos instalados com o Windows Installer podem ser encontrados através das consultas do WMI, mas nem todos os aplicativos usam o Windows Installer. As técnicas específicas para encontrar aplicações instaladas com outras ferramentas dependem do software instalador.

Por exemplo, os aplicativos instalados copiando os arquivos para uma pasta no computador geralmente não podem ser gerenciados usando técnicas discutidas aqui. Você pode gerenciar esses aplicativos como arquivos e pastas usando as técnicas discutidas em Trabalhando com arquivos e pastas.

Para software instalado usando um pacote de instalação, o Windows Installer pode ser encontrado usando as classes Win32Reg_AddRemovePrograms ou Win32_Product. No entanto, ambos têm problemas. O Win32Reg_AddRemovePrograms só estará disponível se estiver a utilizar o System Center Configuration Manager (SCCM). E a classe Win32_Product pode ser lenta e tem efeitos colaterais.

Atenção

A classe Win32_Product não é otimizada para consulta. As consultas que usam filtros curinga fazem com que o WMI use o provedor MSI para enumerar todos os produtos instalados e, em seguida, analisar a lista completa sequencialmente para manipular o filtro. Isso também inicia uma verificação de consistência dos pacotes instalados, verificando e reparando a instalação. A validação é um processo lento e pode resultar em erros nos logs de eventos. Para obter mais informações, procure o artigo da Base de Dados de Conhecimento 974524.

Este artigo fornece um método alternativo para localizar o software instalado.

Consultando a chave do Registro Uninstall para localizar o software instalado

Como a maioria dos aplicativos padrão registra um desinstalador no Windows, podemos trabalhar com eles localmente encontrando-os no registro do Windows. Não há uma maneira garantida de encontrar todos os aplicativos em um sistema. No entanto, é possível encontrar todos os programas com listagens exibidas em Adicionar ou Remover Programas na seguinte chave do Registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall.

Podemos encontrar o número de aplicações instaladas contando o número de chaves de registo:

$UninstallPath = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
(Get-ChildItem -Path $UninstallPath).Count
459

Podemos pesquisar esta lista de aplicações usando uma variedade de técnicas. Para exibir os valores dos valores do Registro nas chaves do Registro em Uninstall, use o GetValue() método das chaves do Registro. O valor do método é o nome da entrada do Registro. Por exemplo, para localizar os nomes de exibição de aplicativos na Uninstall chave, use o seguinte comando:

Get-ChildItem -Path $UninstallPath |
    ForEach-Object -Process { $_.GetValue('DisplayName') } |
    Sort-Object

Nota

Não há garantia de que os valores DisplayName sejam exclusivos.

O exemplo a seguir produz uma saída semelhante à classe 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

Por uma questão de brevidade, este exemplo usa Select-Object para limitar o número de itens devolvidos a três.

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