Gibt es eine einfache Möglichkeit, mit PowerShell die Standardfunktion zum Hinzufügen oder Entfernen von Programmen zu verwenden , um eine vorhandene Anwendung zu deinstallieren ? Oder um zu überprüfen, ob die Anwendung installiert ist?
windows
powershell
windows-installer
uninstall
Rob Paterson
quelle
quelle
(gwmi Win32_Product | ? Name -eq "Software").uninstall()
Ein bisschen Code Golf.EDIT: Im Laufe der Jahre hat diese Antwort einige positive Stimmen bekommen. Ich möchte einige Kommentare hinzufügen. Ich habe PowerShell seitdem nicht mehr verwendet, erinnere mich jedoch an einige Probleme:
-First 1
aber ich bin nicht sicher. Fühlen Sie sich frei zu bearbeiten.Die Verwendung des WMI-Objekts dauert ewig. Dies ist sehr schnell, wenn Sie nur den Namen des Programms kennen, das Sie deinstallieren möchten.
quelle
-like "appNam*"
da die Version im Namen enthalten ist und sich ändert, aber das Programm scheint nicht gefunden zu werden. Irgendwelche Ideen?Um die zweite Methode in Jeff Hillmans Beitrag zu korrigieren, können Sie entweder Folgendes ausführen:
Oder
quelle
Ich habe herausgefunden, dass die Win32_Product-Klasse nicht empfohlen wird, da sie Reparaturen auslöst und nicht abfrageoptimiert ist. Quelle
Ich habe diesen Beitrag von Sitaram Pamarthi mit einem Skript zum Deinstallieren gefunden, wenn Sie die App-Anleitung kennen. Er liefert auch ein weiteres Skript, um hier sehr schnell nach Apps zu suchen .
quelle
Um diesem Beitrag etwas hinzuzufügen, musste ich in der Lage sein, Software von mehreren Servern zu entfernen. Ich habe Jeffs Antwort benutzt, um mich dazu zu führen:
Zuerst habe ich eine Liste von Servern erhalten, ich habe eine AD- Abfrage verwendet, aber Sie können das Array von Computernamen angeben, wie Sie möchten:
Dann habe ich sie durchlaufen und der gwmi-Abfrage den Parameter -computer hinzugefügt:
Ich habe die IdentifyingNumber-Eigenschaft anstelle von name verwendet, um sicherzugehen, dass ich die richtige Anwendung deinstalliert habe.
quelle
Nennen Sie es so:
quelle
Eine Codezeile:
quelle
Ich werde meinen eigenen kleinen Beitrag leisten. Ich musste eine Liste von Paketen vom selben Computer entfernen. Dies ist das Skript, das ich mir ausgedacht habe.
Ich hoffe, das erweist sich als nützlich.
Beachten Sie, dass ich David Stetler die Anerkennung für dieses Skript schulde, da es auf seinem basiert.
quelle
Hier ist das PowerShell-Skript mit msiexec:
quelle
Basierend auf Jeff Hillmans Antwort:
Hier ist eine Funktion, die Sie einfach zu Ihrer hinzufügen
profile.ps1
oder in der aktuellen PowerShell-Sitzung definieren können:Angenommen, Sie wollten Notepad ++ deinstallieren . Geben Sie dies einfach in PowerShell ein:
> uninstall("notepad++")
Seien Sie sich nur bewusst, dass
Get-WmiObject
dies einige Zeit dauern kann. Seien Sie also geduldig!quelle
Verwenden:
Es ist nicht vollständig getestet, wurde jedoch unter PowerShell 4 ausgeführt.
Ich habe die PS1-Datei so ausgeführt, wie sie hier zu sehen ist. Lassen Sie es alle Systeme aus dem AD abrufen und versuchen Sie, mehrere Anwendungen auf allen Systemen zu deinstallieren.
Ich habe die IdentifyingNumber verwendet, um nach der Software-Ursache für die Eingabe von David Stetlers zu suchen.
Nicht getestet:
Was es nicht tut:
Ich konnte uninstall () nicht verwenden. Beim Versuch, dass eine Fehlermeldung angezeigt wird, ist es nicht möglich, eine Methode für einen Ausdruck mit dem Wert NULL aufzurufen. Stattdessen habe ich Remove-WmiObject verwendet, was anscheinend dasselbe bewirkt.
VORSICHT : Ohne Angabe eines Computernamens wird die Software von ALLEN Systemen im Active Directory entfernt.
quelle
Für die meisten meiner Programme haben die Skripte in diesem Beitrag den Job gemacht. Ich musste mich jedoch einem Legacy-Programm stellen, das ich mit der Klasse msiexec.exe oder Win32_Product nicht entfernen konnte. (Aus irgendeinem Grund habe ich Exit 0 bekommen, aber das Programm war noch da)
Meine Lösung bestand darin, die Win32_Process-Klasse zu verwenden:
Mit Hilfe von nickdnk soll mit diesem Befehl der Pfad der exe-Deinstallationsdatei abgerufen werden:
64bit:
32bit:
Sie müssen die Ergebniszeichenfolge bereinigen:
Wenn Sie das entsprechende Programm haben, deinstallieren Sie den exe-Dateipfad. Verwenden Sie diesen Befehl:
Die oben genannten Befehle können auch remote ausgeführt werden. Ich habe sie mit dem Befehl invoke ausgeführt, glaube jedoch, dass das Hinzufügen des Arguments -computername funktionieren kann
quelle