Unbeaufsichtigte Deinstallation von Programmen über CMD


Antworten:


19

Jedes Programm, das sich ordnungsgemäß gemäß den Richtlinien von Microsoft installiert, erstellt einen Registrierungseintrag in HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. Normalerweise ist der Schlüssel für das Programm die GUID oder der Name des Programms. Innerhalb dieses Schlüssels wird ein Eintrag aufgerufen UninstallString. Dieser enthält den auszuführenden Befehl zum Deinstallieren des Programms.

Wenn Sie bereits im Voraus wissen, was Sie deinstallieren werden, sollte es einfach genug sein, dies in Ihre Batch-Datei aufzunehmen. Es wird jedoch schwierig, diesen Prozess zu automatisieren. Sie können den regBefehl verwenden, um Daten aus der Registrierung abzurufen. Er gibt jedoch eine Menge Text um den tatsächlichen Wert eines bestimmten Schlüssels zurück, wodurch die Verwendung erschwert wird. Möglicherweise möchten Sie mit der Verwendung von VBscript oder PowerShell experimentieren, da diese über bessere Optionen zum Abrufen von Daten aus der Registrierung in eine Variable verfügen.


26

Mit WMIC können Sie das richtige Deinstallationsprogramm aufrufen, ohne die GUID usw. zu kennen.

So zeigen Sie eine Liste der Namen der Programme an, die Windows intern bekannt sind:

wmic product get name

Suchen Sie nach Ihrem Produktnamen. Es stimmt wahrscheinlich mit dem überein, der in der Systemsteuerung "Programme und Funktionen" aufgeführt wird , aber nicht immer.

Dann können Sie verwenden

wmic product where name="_my_product_name" call uninstall

Um die Deinstallation durchzuführen, sollte AFAIK schweigen (es ist meiner Erfahrung nach aber probieren Sie es aus, bevor Sie die Farm darauf setzen. Schweigen kann davon abhängen, wie Ihr Installer / Deinstaller erstellt wurde).

Sehen Sie hier für mehr:

Es gibt auch Referenzdokumentation für WMIC auf microsoft.com.


2
Sie können dies für entfernte Computer ausführen, indem Sie /node:"<ComputerName>"ex: hinzufügen wmic /node:"someuser-pc" product get name. Stellen Sie sicher, dass Sie "" um den Namen herum verwenden, da sonst der Fehler "Ungültiger globaler Switch" auftritt. Stellen Sie außerdem sicher, dass Sie dies von einer CMD-Eingabeaufforderung und nicht von einer PowerShell-Eingabeaufforderung aus ausführen, da die "" Problemumgehung für den Fehler "" Ungültiger globaler Switch "in der PowerShell-Eingabeaufforderung nicht funktioniert.
Chris Magnuson

1
Eine gute Antwort, aber eine kleine Einschränkung ist, dass WMIC eine ganze Menge Zeit in Anspruch nehmen kann, um einen Befehl auszuführen. Das Auflisten von Produkten auf meinem PC dauerte ungefähr 3 Minuten.
SmacL

Ordnungsgemäß angegeben, @SmacL. Ich hatte nur Gelegenheit, dies ein paar Mal zu verwenden, und je nachdem, was auf Ihrem System ist, kann ich davon ausgehen, dass es eine Weile dauern würde.
Carnot Antonio Romero

7

Wenn Sie PowerShell 3 (oder höher) installiert haben, können Sie einen WMI-Aufruf ausgeben, um alle Programme mit einem bestimmten Namen (oder "Gefällt mir", um Platzhaltersuchen durchzuführen) abzurufen, und dann die UninstallMethode für jedes dieser Programme aufrufen :

(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()


5

Wenn Sie wissen, wo sich die MSI-Installationsdatei befindet, können Sie Folgendes verwenden:

Msiexec / uninstall Application.msi / quiet


5

Wenn ein Programm Windows Installer verwendet, können Sie einen der folgenden Befehle verwenden:

msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>

Wahrscheinlich verfügen Sie jedoch weder über den Produktcode noch über die ursprüngliche MSI-Datei, die für die Installation verwendet wurde.

Ansonsten gibt es keinen allgemeinen Deinstallationsbefehl, da Installer, die Windows Installer nicht verwenden, dem Betriebssystem "unbekannt" sind. Sie stellen möglicherweise ihre eigene ausführbare Deinstallationsdatei zur Verfügung. Ob diese ausführbare Datei jedoch eine Möglichkeit zum Ausführen ohne GUI enthält, hängt vom jeweiligen Softwarepaket ab.


1

Ein VBScript-Skript hilft Ihnen bei der Deinstallation des erforderlichen Programms.

Zur Verwendung dieses Skripts benötigen Sie den Namen der Software, die sich in Ihrer Registrierung befindet.

Geben Sie einfach den Anwendungsnamen in das Skript ein und führen Sie ihn mit Administratorrechten aus. Es wird die Anwendung deinstallieren. Dies funktioniert jedoch nur für fensterbasierte Anwendungen. Für Standalone-Setups oder Apps, die keinen Eintrag in der Deinstallationszeichenfolge der Registrierung vornehmen, funktioniert das Skript nicht.

In diesem Fall müssen Sie einen anderen Weg finden, um die Anwendung zu deinstallieren.

Code:

On error resume Next

Dim strName, WshShell, oReg, keyname

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

'=============================================
'Change the value here with DisplayName's value
strName = " "
'=============================================
Set WshShell = CreateObject("WScript.Shell")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    keyname = ""
       keyname = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subkey & "\DisplayName")
    If keyname = strName then
        i = subkey
    End If
Next

If i Then

    WshShell.Run "MSIEXEC.EXE /X " & i & " /QN", 1, True
End If

Set WshShell = Nothing
set ObjReg = Nothing

WScript.Quit

1

Überprüfen Sie dies, dies verwendet einen Stapel, suchen Sie den UninstallString-Registrierungsschlüssel der Software und deinstallieren Sie die Software dann im Hintergrund, was im Vergleich zu wmic, das ich gefunden habe, viel zuverlässiger ist . https://community.spiceworks.com/topic/2143980-deploy-or-upgrade-java-8-via-shutdown-script-remove-old-javas

::It extracts software software GUID, then use the GUID to search the name and version
@echo off
setlocal ENABLEDELAYEDEXPANSION

set SoftwareName=Java 8
set NewVersion=8.0.1720.11
set x86GUID=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
set x64GUID=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set Installer=\\dc\sources\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s
REM set Installer=d:\downloads\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s

REM It's faster to first locate the software GUID, then search it's Name, Version & UninstallString
for /f "delims=" %%P in ('reg query "%x86GUID%" /s /f "%SoftwareName%" 2^>nul ^| findstr "HKEY_LOCAL_MACHINE"') do (
  echo %%P
  reg query "%%P" /v "DisplayVersion" 2>nul | findstr /r /c:"  %NewVersion%" >nul && (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo %%B has already been installed
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayVersion" 2^>nul ^|findstr "DisplayVersion"') do echo Version: %%B
    goto :EOF
  ) || (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo Found other version %%B, upgrade in progress
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "UninstallString" 2^>nul ^|findstr "UninstallString"') do (
      echo %%B | findstr /c:"MsiExec.exe"  >nul && (
        set MsiStr=%%B
        set MsiStr=!MsiStr:/I=/X!
        echo !MsiStr! /quiet /norestart
        !MsiStr! /quiet /norestart
        rem %Installer%
      ) || (
        echo None MsiExec Uninstall String %%B
        rem "%%B" /S
      )
    )
  )
)
if not defined MsiStr (
  echo %SoftwareName% not found, install it?
  rem %Installer%
)

endlocal

0

Die richtige Antwort ist oben, aber für Windows X64-Installationen müssen Sie auch Folgendes überprüfen:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.