Usando PowerShell para desinstalar aplicativos

No ano passado, falei sobre como precisava de um script que detectasse todas as versões de um aplicativo em um computador e desinstalasse cada versão, uma de cada vez. Resumindo, não consegui encontrar um, então acabei montando um! Desde que a postagem original foi publicada, recebi várias perguntas sobre como forçar um delta ou um inventário de hardware SCCM completo depois que os aplicativos foram desinstalados. Eventualmente, decidi atualizar meu script original e a postagem sobre o uso PowerShell para desinstalar aplicativos.

O novo script inclui um inventário delta e agora há uma opção para forçar um inventário completo de hardware SCCM. Anteriormente, se o aplicativo desinstalado fosse um arquivo EXE (e não um arquivo MSI), o PowerShell o script falharia porque o código rígido permitiria apenas a desinstalação de arquivos MSI. Corrigi esse problema, então agora os arquivos EXE e MSI foram desinstalados.

Desinstalar aplicativos - comemorar

Antes de chegar a isso, porém, devo dizer que meu amigo Jason Sandys já teve um VBScript para fazer exatamente o que eu estava procurando no ano passado. Há uma longa piada interna entre nós sobre VBScript vs PowerShell, mas não vou aborrecê-lo com isso aqui. Quando eu estava procurando scripts originalmente, tinha que ser PowerShell ou nada. Na época, o motivo era simples. Eu precisava aprender mais sobre PowerShell, então eu nunca procurei por um VBScript e nunca vi a postagem de Jason. A parte engraçada é que Jason finalmente me contou sobre seu roteiro e me mostrou um recurso muito legal. Você pode forçar a ocorrência de um ciclo de inventário de hardware posteriormente! Você deve verificar o roteiro de Jason em seu site de blog.

Posso ouvir alguns de vocês dizendo: “Qual script é melhor?” A resposta depende, em minha opinião, do seu entendimento sobre VBScript e com a PowerShell. Fora isso, escolha o que você mais gosta e use!

Fundo

Eu estava testando o produto Relatório de informações do monitor (MIR) que agora faz parte da Relatório Enhansoft. Esse teste envolveu a implantação de várias atualizações nos clientes do meu laboratório. Meu laboratório é uma mistura de sistemas operacionais (SO) x86 e x64. Depois de implantar todas essas versões do MIR, fiquei procurando uma solução que me permitisse limpar rapidamente as instalações do cliente. No final das contas, eu queria apenas a versão final do MIR instalada em cada cliente.

Desinstalar aplicativos - teste

Infelizmente, não havia como saber quais versões do MIR foram implantadas em quais computadores de teste. Havia também a possibilidade de que vários computadores de teste pudessem ter mais de uma versão do MIR instalada. Eu precisava de uma maneira fácil de detectar automaticamente todas as versões do MIR em um computador e desinstalar cada uma, uma de cada vez, sem ter que desinstalá-la manualmente em cada computador. Desde então, fico feliz em dizer que a configuração do MIR foi atualizada, portanto, apenas uma versão dele pode ser instalada em um computador por vez.

De volta ao problema do ano passado. Você pensaria que eu poderia encontrar um PowerShell solução. Você já implantou Adobe Reader? Então você saberia que pode haver várias versões diferentes de Adobe Reader listado dentro Adicionar / Remover Programa (ARP) em um computador. Por que não haveria uma maneira fácil de excluir as versões anteriores?

Eu encontrei muito PowerShell scripts que me ajudariam a desinstalar apenas um aplicativo por vez. Havia até alguns PowerShell scripts por aí que consultariam Win32_Product e, em seguida, desinstale dois ou mais aplicativos. Se você, no entanto, ler a postagem do blog de Greg Ramsey Win32_Product Is Evil você saberia que esta é uma má ideia. Você nunca deve fazer isso! É por isso que eu nunca poderia usar Win32_Product em meu script devido aos problemas que ele cria.

Usando PowerShell para desinstalar aplicativos

Em alto nível, foi isso que meu atualizou PowerShell script faz:
-Detecta se o script está sendo executado no modo x84, x64 ou WoW32.
-Leia as chaves de registro de desinstalação de x86 e x64.
-Localiza todas as versões de um aplicativo.
- Percorre a lista de entradas ARP e coleta:
-Cadeia de nome / GUID / desinstalação do MSI.
-Detecta se o aplicativo é EXE ou MSI e desinstala o aplicativo de acordo.
-Registra cada etapa em um arquivo de log.
-Executa um inventário de hardware delta ou, se o sinalizador estiver definido, um inventário de hardware SCCM completo.

Abaixo está a aparência do script final, mas você também pode baixar isso do Enhansoft local na rede Internet.

Desinstalar aplicativos - script

Forçar um inventário completo de hardware SCCM

Por padrão, um ciclo de inventário de hardware delta começará como uma das últimas etapas do script. Não há mais nada que você precise fazer. Gosto de forçar, no entanto, um inventário completo ao desinstalar aplicativos. Se você for como eu, tudo o que você precisa fazer é alterar o valor $fullinventory = $false para $true. Isso forçará a ocorrência de um inventário de hardware SCCM completo.

Como implantar o script de aplicativo de desinstalação com SCCM

Primeiro, comece editando o script. Substitua o nome do aplicativo pelo que deseja desinstalar. Na versão de download, ele está definido como: Monitor * Informações * Relatórios * Lembre-se de que * é um curinga usado para pesquisar entradas ARP.

Em segundo lugar, decida se deseja forçar um inventário de hardware SCCM completo, então defina o sinalizador de acordo.

Terceiro, crie um pacote e um programa para sua linha de comando. Deve ser semelhante ao seguinte:
powershell.exe -ExecutionPolicy bypass -file Uninstallv10.ps1

Quarto e, finalmente, implante o pacote e o programa como faria com qualquer outro programa.

Usando o script de aplicativo de desinstalação

Você pode ver na imagem abaixo que eu tive várias cópias do MIR instaladas neste computador de teste no ano passado.

Desinstalar aplicativos - Aplicativos MIR

Eu configurei meu programa para implantar silenciosamente em segundo plano. Nada para ver da perspectiva do usuário final!

Se você gostaria de verificar se o PowerShell o script está em execução, olhe para o Gerenciador de tarefas. Você terá que ser rápido! O script leva apenas alguns segundos a alguns minutos para ser executado, dependendo do número de ARP que precisa remover. Como um aparte, você também pode ver que o script foi executado dentro do Execmgr.log em seu computador de teste.

Desinstalar aplicativos - aplicativos MIR removidos

Você pode ver na captura de tela acima que depois de alguns minutos todos os Relatório de informações do monitor As entradas ARP foram removidas.

Lembre-se de que o ciclo de inventário de hardware (delta ou completo) começará logo depois que todos os aplicativos forem desinstalados. Leva apenas alguns segundos para ser executado (~ 60 segundos).

Reinicializar computadores

Em alguns casos, você pode querer reinicializar os computadores depois que o inventário de hardware for enviado para SCCM. No meu caso, adicionei um Dorme comando para o PowerShell script por 75 segundos antes de reiniciar. Se o seu inventário de hardware demorar mais, basta ajustar o tempo de acordo.

Aqui estão os comandos que usei:
Início do sono - segundos 75
reiniciar o computador -force

Se você tiver alguma dúvida sobre como usar PowerShell para desinstalar aplicativos, entre em contato comigo @GarthMJ.

Veja como Right Click Tools está mudando a forma como os sistemas são gerenciados.

Aumente imediatamente a produtividade com o nosso limitado e gratuito, Community Edition.

Comece com Right Click Tools hoje:

Compartilhar isso:

Suporte

  • Este campo é para fins de validação e não deve ser alterado.

Contato

  • Este campo é para fins de validação e não deve ser alterado.

Ao enviar este formulário, você entende que o Recast Software pode processar seus dados conforme descrito no Recast Software Política de Privacidade.

pt_BRPortuguese