Czy istnieje prosty sposób na podłączenie się do standardowej funkcji „ Dodaj lub usuń programy ” przy użyciu programu PowerShell w celu odinstalowania istniejącej aplikacji ? Albo sprawdzić, czy aplikacja jest zainstalowana?
windows
powershell
windows-installer
uninstall
Rob Paterson
źródło
źródło
(gwmi Win32_Product | ? Name -eq "Software").uninstall()
Mały golf kodowy.EDYCJA: Na przestrzeni lat ta odpowiedź zyskała kilka pozytywnych głosów. Chciałbym dodać kilka komentarzy. Od tego czasu nie korzystałem z PowerShell, ale pamiętam, że zauważyłem kilka problemów:
-First 1
ale nie jestem pewien. Zapraszam do edycji.Korzystanie z obiektu WMI trwa wiecznie. Jest to bardzo szybkie, jeśli znasz tylko nazwę programu, który chcesz odinstalować.
źródło
-like "appNam*"
ponieważ wersja jest w nazwie i zmienia się, ale wydaje się, że nie można znaleźć programu. Jakieś pomysły?Aby naprawić drugą metodę w poście Jeffa Hillmana, możesz wykonać:
Lub
źródło
Dowiedziałem się, że klasa Win32_Product nie jest zalecana, ponieważ wyzwala naprawy i nie jest zoptymalizowana pod kątem zapytań. Źródło
Znalazłem ten post od Sitaram Pamarthi ze skryptem do odinstalowania, jeśli znasz przewodnik po aplikacji. On również dostarcza inny skrypt do wyszukiwania aplikacji bardzo szybko tutaj .
źródło
Aby trochę dodać do tego postu, potrzebowałem możliwości usuwania oprogramowania z wielu serwerów. Użyłem odpowiedzi Jeffa, aby doprowadzić mnie do tego:
Najpierw otrzymałem listę serwerów, użyłem zapytania AD , ale możesz podać tablicę nazw komputerów, jak chcesz:
Następnie przejrzałem je, dodając parametr -computer do zapytania gwmi:
Użyłem właściwości IdentifyingNumber do dopasowania zamiast nazwy, aby upewnić się, że odinstalowałem odpowiednią aplikację.
źródło
Nazwij to w ten sposób:
źródło
Jedna linia kodu:
źródło
Dokonam niewielkiego wkładu własnego. Musiałem usunąć listę pakietów z tego samego komputera. To jest scenariusz, który wymyśliłem.
Mam nadzieję, że okaże się to przydatne.
Zauważ, że jestem winien Davidowi Stetlerowi uznanie za ten skrypt, ponieważ jest on oparty na jego.
źródło
Oto skrypt PowerShell używający msiexec:
źródło
Na podstawie odpowiedzi Jeffa Hillmana:
Oto funkcja, którą możesz po prostu dodać do swojej
profile.ps1
lub zdefiniować w bieżącej sesji PowerShell:Powiedzmy, że chcesz odinstalować Notepad ++ . Po prostu wpisz to w PowerShell:
> uninstall("notepad++")
Pamiętaj tylko, że
Get-WmiObject
może to zająć trochę czasu, więc bądź cierpliwy!źródło
Posługiwać się:
Nie jest w pełni przetestowany, ale działał pod PowerShell 4.
Uruchomiłem plik PS1, jak widać tutaj. Pozwalając mu pobrać wszystkie systemy z AD i próbując odinstalować wiele aplikacji we wszystkich systemach.
Użyłem numeru identyfikacyjnego do wyszukania przyczyny oprogramowania danych wejściowych Davida Stetlera.
Nie testowany:
Czego to nie robi:
Nie mogłem użyć uninstall (). Próbując uzyskać błąd informujący mnie, że wywołanie metody dla wyrażenia, które ma wartość NULL, nie jest możliwe. Zamiast tego użyłem Remove-WmiObject, który wydaje się osiągać to samo.
UWAGA : Bez podania nazwy komputera usuwa oprogramowanie ze WSZYSTKICH systemów w usłudze Active Directory.
źródło
W przypadku większości moich programów skrypty w tym poście spełniły swoje zadanie. Ale musiałem zmierzyć się ze starszym programem, którego nie mogłem usunąć za pomocą klasy msiexec.exe lub Win32_Product. (z jakiegoś powodu dostałem wyjście 0, ale program wciąż tam był)
Moim rozwiązaniem było użycie klasy Win32_Process:
z pomocą nickdnk ta komenda pozwala uzyskać ścieżkę do pliku deinstalacyjnego exe:
64-bitowy:
32-bitowy:
będziesz musiał wyczyścić ciąg wynikowy:
teraz, gdy masz odpowiednią ścieżkę do pliku deinstalacji programu exe , możesz użyć tego polecenia:
powyższe polecenia można również uruchomić zdalnie - zrobiłem to za pomocą polecenia invoke, ale uważam, że dodanie argumentu -computername może działać
źródło