¿Hay una manera simple de conectarse a la funcionalidad estándar ' Agregar o quitar programas ' usando PowerShell para desinstalar una aplicación existente ? ¿O para verificar si la aplicación está instalada?
windows
powershell
windows-installer
uninstall
Rob Paterson
fuente
fuente
(gwmi Win32_Product | ? Name -eq "Software").uninstall()
Un pequeño código de golf.EDITAR: a lo largo de los años, esta respuesta ha recibido bastantes votos a favor. Me gustaría agregar algunos comentarios. Desde entonces no he usado PowerShell, pero recuerdo haber observado algunos problemas:
-First 1
pero no estoy seguro. Siéntase libre de editar.Usar el objeto WMI lleva una eternidad. Esto es muy rápido si solo conoce el nombre del programa que desea desinstalar.
fuente
-like "appNam*"
ya que la versión está en el nombre y cambia, pero no parece encontrar el programa. ¿Algunas ideas?Para arreglar el segundo método en la publicación de Jeff Hillman, puedes hacer lo siguiente:
O
fuente
Descubrí que la clase Win32_Product no se recomienda porque desencadena reparaciones y no está optimizada para consultas. Fuente
Encontré esta publicación de Sitaram Pamarthi con un script para desinstalar si conoces el guid de la aplicación. También proporciona otro script para buscar aplicaciones realmente rápido aquí .
fuente
Para agregar un poco a esta publicación, necesitaba poder eliminar el software de varios servidores. Usé la respuesta de Jeff para llevarme a esto:
Primero obtuve una lista de servidores, utilicé una consulta AD , pero puede proporcionar la matriz de nombres de computadora como desee:
Luego los recorrí, agregando el parámetro -computer a la consulta gwmi:
Utilicé la propiedad IdentifyingNumber para hacer coincidir en lugar de nombre, solo para asegurarme de que estaba desinstalando la aplicación correcta.
fuente
Llámalo de esta manera:
fuente
Una línea de código:
fuente
Haré mi pequeña contribución. Necesitaba eliminar una lista de paquetes de la misma computadora. Este es el guión que se me ocurrió.
Espero que esto sea útil.
Tenga en cuenta que le debo a David Stetler el crédito por este guión, ya que se basa en el suyo.
fuente
Aquí está el script de PowerShell usando msiexec:
fuente
Basado en la respuesta de Jeff Hillman:
Aquí hay una función que puede agregar
profile.ps1
o definir en su sesión actual de PowerShell:Digamos que desea desinstalar Notepad ++ . Simplemente escriba esto en PowerShell:
> uninstall("notepad++")
Solo tenga en cuenta que
Get-WmiObject
puede tomar algo de tiempo, ¡así que sea paciente!fuente
Utilizar:
No está completamente probado, pero se ejecutó con PowerShell 4.
Ejecuté el archivo PS1 como se ve aquí. Permitiéndole recuperar todos los sistemas del AD e intentando desinstalar múltiples aplicaciones en todos los sistemas.
He utilizado el número de identificación para buscar la causa del software de la entrada de David Stetlers.
No probado:
Lo que no hace:
No pude usar desinstalar (). Al intentar obtener un error, me dice que no es posible llamar a un método para una expresión que tiene un valor de NULL. En su lugar, utilicé Remove-WmiObject, que parece lograr lo mismo.
PRECAUCIÓN : Sin un nombre de computadora dado, elimina el software de TODOS los sistemas en el Directorio Activo.
fuente
Para la mayoría de mis programas, los scripts en esta publicación hicieron el trabajo. Pero tuve que enfrentar un programa heredado que no pude eliminar usando msiexec.exe o la clase Win32_Product. (por alguna razón obtuve la salida 0 pero el programa todavía estaba allí)
Mi solución fue usar la clase Win32_Process:
con la ayuda de nickdnk, este comando es obtener la ruta de desinstalación del archivo exe:
64bit:
32bit:
Tendrá que limpiar la cadena de resultados:
ahora, cuando tenga el programa relevante desinstalar la ruta del archivo exe , puede usar este comando:
los comandos anteriores también pueden ejecutarse de forma remota: lo hice usando el comando invoke pero creo que agregar el argumento -computername puede funcionar
fuente