Existe uma maneira simples de conectar-se à funcionalidade padrão ' Adicionar ou remover programas ' usando o PowerShell para desinstalar um aplicativo existente ? Ou para verificar se o aplicativo está instalado?
windows
powershell
windows-installer
uninstall
Rob Paterson
fonte
fonte
(gwmi Win32_Product | ? Name -eq "Software").uninstall()
Um pequeno código de golfe.EDIT: Ao longo dos anos, esta resposta recebeu alguns votos positivos. Eu gostaria de adicionar alguns comentários. Não usei o PowerShell desde então, mas lembro-me de observar alguns problemas:
-First 1
sim , mas não tenho certeza. Sinta-se livre para editar.O uso do objeto WMI leva uma eternidade. Isso é muito rápido se você apenas souber o nome do programa que deseja desinstalar.
fonte
-like "appNam*"
porque a versão está no nome e muda, mas parece não encontrar o programa. Alguma ideia?Para corrigir o segundo método na postagem de Jeff Hillman, você pode:
Ou
fonte
Descobri que a classe Win32_Product não é recomendada porque aciona reparos e não é otimizada para consultas. Fonte
Encontrei este post do Sitaram Pamarthi com um script para desinstalar, se você conhece o aplicativo guid. Ele também fornece outro script para procurar aplicativos muito rápido aqui .
fonte
Para adicionar um pouco a este post, eu precisava poder remover o software de vários servidores. Eu usei a resposta de Jeff para me levar a isso:
Primeiro, recebi uma lista de servidores, usei uma consulta do AD , mas você pode fornecer a matriz de nomes de computadores da maneira que desejar:
Então eu passei por eles, adicionando o parâmetro -computer à consulta gwmi:
Usei a propriedade IdentifyingNumber para comparar em vez do nome, apenas para ter certeza de que estava desinstalando o aplicativo correto.
fonte
Chame assim:
fonte
Uma linha de código:
fonte
Eu darei minha própria pequena contribuição. Eu precisava remover uma lista de pacotes do mesmo computador. Este é o script que eu criei.
Espero que isso seja útil.
Note que eu devo a David Stetler o crédito por esse script, pois ele é baseado no dele.
fonte
Aqui está o script do PowerShell usando o msiexec:
fonte
Com base na resposta de Jeff Hillman:
Aqui está uma função que você pode adicionar
profile.ps1
ou definir na sessão atual do PowerShell:Digamos que você quisesse desinstalar o Notepad ++ . Basta digitar isso no PowerShell:
> uninstall("notepad++")
Esteja ciente de que
Get-WmiObject
pode levar algum tempo; portanto, seja paciente!fonte
Usar:
Não foi totalmente testado, mas foi executado no PowerShell 4.
Eu executei o arquivo PS1 como é visto aqui. Permitindo que ele recupere todos os sistemas do AD e tentando desinstalar vários aplicativos em todos os sistemas.
Eu usei o IdentifyingNumber para procurar a causa do software da entrada de David Stetlers.
Não testado:
O que não faz:
Não consegui usar o uninstall (). Tentando obter um erro informando que não é possível chamar um método para uma expressão que tenha um valor NULL. Em vez disso, usei o Remove-WmiObject, que parece realizar o mesmo.
CUIDADO : Sem o nome do computador, ele remove o software de TODOS os sistemas do Active Directory.
fonte
Para a maioria dos meus programas, os scripts deste Post fizeram o trabalho. Mas tive que enfrentar um programa herdado que não consegui remover usando a classe msiexec.exe ou Win32_Product. (por algum motivo, consegui a saída 0, mas o programa ainda estava lá)
Minha solução foi usar a classe Win32_Process:
com a ajuda do nickdnk, este comando é obter o caminho do arquivo de desinstalação exe:
64 bits:
32bit:
você precisará limpar a sequência de resultados:
Agora, quando você tiver o caminho do arquivo exe de desinstalação do programa relevante , poderá usar este comando:
os comandos acima também podem ser executados remotamente - eu fiz isso usando o comando invoke, mas acredito que adicionar o argumento -computername pode funcionar
fonte