Existe-t-il un moyen simple de se connecter à la fonctionnalité standard « Ajouter ou supprimer des programmes » à l'aide de PowerShell pour désinstaller une application existante ? Ou pour vérifier si l'application est installée?
windows
powershell
windows-installer
uninstall
Rob Paterson
la source
la source
(gwmi Win32_Product | ? Name -eq "Software").uninstall()
Un peu de golf codé.EDIT: Au fil des ans, cette réponse a reçu un certain nombre de votes positifs. Je voudrais ajouter quelques commentaires. Je n'ai pas utilisé PowerShell depuis, mais je me souviens avoir observé quelques problèmes:
-First 1
mais je ne suis pas sûr. N'hésitez pas à modifier.L'utilisation de l'objet WMI prend une éternité. C'est très rapide si vous connaissez simplement le nom du programme que vous souhaitez désinstaller.
la source
-like "appNam*"
puisque la version est dans le nom et qu'elle change, mais il ne semble pas trouver le programme. Des idées?Pour corriger la deuxième méthode dans l'article de Jeff Hillman, vous pouvez soit faire un:
Ou
la source
J'ai découvert que la classe Win32_Product n'est pas recommandée car elle déclenche des réparations et n'est pas optimisée pour la requête. La source
J'ai trouvé ce post de Sitaram Pamarthi avec un script à désinstaller si vous connaissez l'application guid. Il fournit également un autre script pour rechercher des applications très rapidement ici .
la source
Pour ajouter un peu à cet article, je devais être capable de supprimer des logiciels de plusieurs serveurs. J'ai utilisé la réponse de Jeff pour m'amener à ceci:
J'ai d'abord eu une liste de serveurs, j'ai utilisé une requête AD , mais vous pouvez fournir le tableau de noms d'ordinateurs comme vous le souhaitez:
Ensuite, je les ai parcourus, en ajoutant le paramètre -computer à la requête gwmi:
J'ai utilisé la propriété IdentifyingNumber pour faire correspondre au lieu du nom, juste pour être sûr de désinstaller la bonne application.
la source
Appelez-le ainsi:
la source
Une ligne de code:
la source
Je ferai ma propre petite contribution. J'avais besoin de supprimer une liste de paquets du même ordinateur. C'est le script que j'ai imaginé.
J'espère que cela se révélera utile.
Notez que je dois à David Stetler le mérite de ce script car il est basé sur le sien.
la source
Voici le script PowerShell utilisant msiexec:
la source
Basé sur la réponse de Jeff Hillman:
Voici une fonction que vous pouvez simplement ajouter à votre
profile.ps1
ou définir dans la session PowerShell actuelle:Disons que vous vouliez désinstaller Notepad ++ . Tapez simplement ceci dans PowerShell:
> uninstall("notepad++")
Sachez simplement que cela
Get-WmiObject
peut prendre du temps, alors soyez patient!la source
Utilisation:
Il n'est pas entièrement testé, mais il a fonctionné sous PowerShell 4.
J'ai exécuté le fichier PS1 tel qu'il est vu ici. Laisser récupérer tous les systèmes de l' AD et essayer de désinstaller plusieurs applications sur tous les systèmes.
J'ai utilisé le IdentifyingNumber pour rechercher la cause logicielle de l'entrée de David Stetlers.
Pas testé:
Ce qu'il ne fait pas:
Je n'ai pas pu utiliser uninstall (). Essayer que j'ai eu une erreur me disant que l'appel d'une méthode pour une expression qui a une valeur NULL n'est pas possible. Au lieu de cela, j'ai utilisé Remove-WmiObject, qui semble accomplir la même chose.
PRÉCAUTION : Sans nom d'ordinateur donné, il supprime le logiciel de TOUS les systèmes dans Active Directory.
la source
Pour la plupart de mes programmes, les scripts de cet article ont fait le travail. Mais j'ai dû faire face à un programme hérité que je ne pouvais pas supprimer en utilisant la classe msiexec.exe ou Win32_Product. (pour une raison quelconque, j'ai obtenu la sortie 0 mais le programme était toujours là)
Ma solution était d'utiliser la classe Win32_Process:
avec l'aide de nickdnk, cette commande consiste à obtenir le chemin du fichier de désinstallation exe:
64 bits:
32 bits:
vous devrez nettoyer la chaîne de résultat:
maintenant, lorsque vous avez le chemin du fichier exe de désinstallation du programme approprié , vous pouvez utiliser cette commande:
les commandes ci-dessus peuvent également s'exécuter à distance - je l'ai fait en utilisant la commande invoke mais je crois que l'ajout de l'argument -computername peut fonctionner
la source