bestimmten Registry Wert unter unbekanntem Schlüssel suchen und einen anderen Wert unter dem gefundenem Schlüssel auslesen
Moin, Moin,
ich habe hier schon mehrere Beiträge gelesen, für mein Problem aber noch keine Lösung daraus ableiten können. Daher nun meine Frage an die "grosse Runde".
Ich möchte, am liebsten per Batch, einen mir unbekannten Registry Schlüssel anhand eines bekannten Wertes in diesem Schlüssel finden und anschliessend einen bestimmten Wert im gefundenen Schlüssel auslesen.
Hintergrund ist eine VPN Software, die ich Silent deinstallieren möchte. Leider hat die Software die Angewohnheit, sich bei jeder Installation unter einer neuen GUID in die Registry unter "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<wechselnde GUID>" zu schreiben.
Bekannt ist der Wert "DisplayName" unter dem Schlüssel "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<wechselnde GUID>" .
Ich benötige dann den Inhalt des Wertes "UninstallString" im gefundenen Schlüssel um ihn dann aufzurufen.
Leider lässt sich diese spezielle Software auch nur über "msiexec /X<weschselnde GUID>" deinstallieren. Diesen String möchte ich dann mit /qn /norestart erweitern um die Deinstallation zu starten
Ich habe es nun immerhin schon geschafft mit einer CMD den String Display Name zu finden: (im Beispiel wird nach "Windows Resource Kit Tools" gesucht)
Was mir jetzt fehlt, ist der Name des Schlüssels, in dem der gesuchte Wert %SSW% gefunden wurde. ich könnte dann entweder den Wert "UninstallString" auslesen wollen, um dann die Silent Deinstallation zu starten,
oder auch den Namen des Schlüssels verwenden, um die Deinstallation per msiexec /X<gefundene GUID> /qn /norestart zu starten.
Ich hoffe, ich habe mich enigermassen verständlich ausgedrückt und mein Problem wird verstanden. Natürlich bin ich für jeden Lösungsansatz dankbar.
ich habe hier schon mehrere Beiträge gelesen, für mein Problem aber noch keine Lösung daraus ableiten können. Daher nun meine Frage an die "grosse Runde".
Ich möchte, am liebsten per Batch, einen mir unbekannten Registry Schlüssel anhand eines bekannten Wertes in diesem Schlüssel finden und anschliessend einen bestimmten Wert im gefundenen Schlüssel auslesen.
Hintergrund ist eine VPN Software, die ich Silent deinstallieren möchte. Leider hat die Software die Angewohnheit, sich bei jeder Installation unter einer neuen GUID in die Registry unter "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<wechselnde GUID>" zu schreiben.
Bekannt ist der Wert "DisplayName" unter dem Schlüssel "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\<wechselnde GUID>" .
Ich benötige dann den Inhalt des Wertes "UninstallString" im gefundenen Schlüssel um ihn dann aufzurufen.
Leider lässt sich diese spezielle Software auch nur über "msiexec /X<weschselnde GUID>" deinstallieren. Diesen String möchte ich dann mit /qn /norestart erweitern um die Deinstallation zu starten
Ich habe es nun immerhin schon geschafft mit einer CMD den String Display Name zu finden: (im Beispiel wird nach "Windows Resource Kit Tools" gesucht)
@echo off
cls
set SSW=Windows Resource Kit Tools
FOR /F "tokens=1,3,4,5,6" %%A IN ('reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall /s') DO IF "%%A %%B %%C %%D %%E" EQU "DisplayName %SSW%" goto erfolg
echo %SSW% wurde leider nicht gefunden.
goto eol
:erfolg
echo %SSW% wurde gefunden.
:eol
Was mir jetzt fehlt, ist der Name des Schlüssels, in dem der gesuchte Wert %SSW% gefunden wurde. ich könnte dann entweder den Wert "UninstallString" auslesen wollen, um dann die Silent Deinstallation zu starten,
oder auch den Namen des Schlüssels verwenden, um die Deinstallation per msiexec /X<gefundene GUID> /qn /norestart zu starten.
Ich hoffe, ich habe mich enigermassen verständlich ausgedrückt und mein Problem wird verstanden. Natürlich bin ich für jeden Lösungsansatz dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121488
Url: https://administrator.de/contentid/121488
Ausgedruckt am: 26.11.2024 um 09:11 Uhr
14 Kommentare
Neuester Kommentar
da ich es immer sehr anstrengend finde "nur" mit Windows Bordmitteln zu arbeiten, benutze ich die UNIX-Tools-für-Windows (http://unxutils.sourceforge.net/), http://www.winfaq.de/faq_html/Content/tip1000/onlinefaq.php?h=tip1488.h ..)
Entpacken und in einen Ordner kopieren der schon in den Systemvariablen eingebunden ist (z.B. c:\windows\system32) oder einen neuen Ordner anlegen und in die variablen eintragen (bevorzugt einen neuen ordner nehmen)
Danach stehen sehr viele mächtige tools aus der UNIX-Welt zur verfügung die Dir das Leben sehr vereinfachen können.
Die suche könnte dann folgendermaßen aussehen:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | grep DisplayName
Beispiel:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall|grep -i book
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\uninstall\AddressBook
wenn du dir nicht sicher bist bei der Schreibweise (ob GROß oder klein) dann lieber so:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | grep -i DisplayName
Was auch immerr Du an dieser stelle findest kannst Du entweder "nur" ausgeben lassen oder mit einer weiteren pipe (|) weiterverarbeiten. bedeutet im Klartext, Du kannst den gefundenen wert direkt ausführen lassen und somit würde die Software in einen Arbeitsschritt gefunden und Deinstalliert werden
P.S.
die unix-tools haben in der Regel alle eine Hilfefunktion die über --help aufgerufen werden kann
z.B.
grep --help
Usage: grep [OPTION]... PATTERN [FILE] ...
Search for PATTERN in each FILE or standard input.
Example: grep -i 'hello world' menu.h main.c
Entpacken und in einen Ordner kopieren der schon in den Systemvariablen eingebunden ist (z.B. c:\windows\system32) oder einen neuen Ordner anlegen und in die variablen eintragen (bevorzugt einen neuen ordner nehmen)
Danach stehen sehr viele mächtige tools aus der UNIX-Welt zur verfügung die Dir das Leben sehr vereinfachen können.
Die suche könnte dann folgendermaßen aussehen:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | grep DisplayName
Beispiel:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall|grep -i book
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\uninstall\AddressBook
wenn du dir nicht sicher bist bei der Schreibweise (ob GROß oder klein) dann lieber so:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | grep -i DisplayName
Was auch immerr Du an dieser stelle findest kannst Du entweder "nur" ausgeben lassen oder mit einer weiteren pipe (|) weiterverarbeiten. bedeutet im Klartext, Du kannst den gefundenen wert direkt ausführen lassen und somit würde die Software in einen Arbeitsschritt gefunden und Deinstalliert werden
P.S.
die unix-tools haben in der Regel alle eine Hilfefunktion die über --help aufgerufen werden kann
z.B.
grep --help
Usage: grep [OPTION]... PATTERN [FILE] ...
Search for PATTERN in each FILE or standard input.
Example: grep -i 'hello world' menu.h main.c
Servus,
Was ja "eigentlich" nix verkehrtes wäre
Und da Billy Boy und seine Praktikanten eh gerne bei Unix "ähh" "fremd finden" ...
Gruß
da ich es immer sehr anstrengend finde "nur" mit Windows Bordmitteln zu arbeiten, benutze ich die UNIX-Tools-für-Windows
Was ja "eigentlich" nix verkehrtes wäre
Und da Billy Boy und seine Praktikanten eh gerne bei Unix "ähh" "fremd finden" ...
Die suche könnte dann folgendermaßen aussehen:
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | Find "DisplayName"
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | Find "DisplayName"
Gruß
Naja, so schwer sollte das nicht sein.
Probier mal
Das Bonjour war mein Testwert, musst du mit deinem ersetzen. In %%i steht der von dir gesuchte Key, %%k ist nur zur Kontrolle.
<edit> Option /s kann man sich natürlich schenken -> entfernt. </edit>
Probier mal
@echo off &setlocal
set "name=Bonjour"
for /f "tokens=7 delims=\" %%i in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\^|findstr "Uninstall\\\\{"') do (
for /f "tokens=2* delims= " %%j in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%%i^|findstr /c:"DisplayName "^|findstr /c:"%name%"') do echo %%i %%k
)
pause
<edit> Option /s kann man sich natürlich schenken -> entfernt. </edit>
Danke für die Antworten, leider helfen sie mir aber nicht weiter.
Servus und "sorry" - dein Ansatz machte den Eindruck - du brauchst nur einen Anschubser und nicht die ganze Packung...
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | Find "DisplayName" >123.txt
for /f "tokens=6,7 delims=\" %%a in (123.txt) do echo %%b
Gruß
passt schon.
ich hab keinen passenderen Wert in meiner Registry gefunden..
Und der - der in meinen Augen gepasst hat, war nach dem 7 \ von daher das %%B.
ich hätte auch Tokens=7 und %%a nehmen können oder 5 und %%C
wobei die doppelte Schleife und das weglassen der 123.datei natürlich wesentlich eleganter ist.
Gruß
ich hab keinen passenderen Wert in meiner Registry gefunden..
Und der - der in meinen Augen gepasst hat, war nach dem 7 \ von daher das %%B.
ich hätte auch Tokens=7 und %%a nehmen können oder 5 und %%C
wobei die doppelte Schleife und das weglassen der 123.datei natürlich wesentlich eleganter ist.
Gruß
Hallo zusammen,
bis jetzt haben wir nur XP in Einsatz gehabt und diese Abfrage hat einwandfrei funktioniert. Leider funktioniert sie nicht mehr unter Windows 7. Nun kommen bei uns immer mehr Windows 7 Rechner und ich würde lieben gerne sie weiter benutzen. Am liebsten wäre es mir natürlich wenn Sie unter beide Systeme (XP;7) funktioniert.
Es wäre nett, wenn mir jemand hier weiter helfen könnte.
Vielen dank
bis jetzt haben wir nur XP in Einsatz gehabt und diese Abfrage hat einwandfrei funktioniert. Leider funktioniert sie nicht mehr unter Windows 7. Nun kommen bei uns immer mehr Windows 7 Rechner und ich würde lieben gerne sie weiter benutzen. Am liebsten wäre es mir natürlich wenn Sie unter beide Systeme (XP;7) funktioniert.
Es wäre nett, wenn mir jemand hier weiter helfen könnte.
Vielen dank
Hallo xxsadmin.
In erster Linie funktioniert es nicht mehr, weil auf Win7 die Ausgabe nicht mehr durch Tabs, sondern durch Spaces getrennt kommt. Da Space und Tab sowieso beides Standarddelimiter in FOR Schleifen sind, sollte es möglich sein das Ganze mit ein paar Anpassungen für beide Systeme rennen zu lassen.
Folgendes funktioniert bei mir auf Win7:
Nun liegt's noch an dir herauszufinden, ob das auch auf XP rennt
Grüße
rubberman
In erster Linie funktioniert es nicht mehr, weil auf Win7 die Ausgabe nicht mehr durch Tabs, sondern durch Spaces getrennt kommt. Da Space und Tab sowieso beides Standarddelimiter in FOR Schleifen sind, sollte es möglich sein das Ganze mit ein paar Anpassungen für beide Systeme rennen zu lassen.
Folgendes funktioniert bei mir auf Win7:
@echo off &setlocal
set "name=Microsoft Choice Guard"
for /f "tokens=7 delims=\" %%i in (
'reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"^|findstr /riec:"\\Uninstall\\{[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*-[0-9A-F][0-9A-F]*}"'
) do (
for /f "tokens=2*" %%j in (
'reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%%i" /v "DisplayName" 2^>nul^|findstr /iec:"%name%"'
) do echo %%i %%k
)
pause
Grüße
rubberman
Servus Rubberman
Hab ich ihm abgenommen
tuts (wie zu erwarten war)
retour
Hab ich ihm abgenommen
tuts (wie zu erwarten war)
Grüße
rubberman
rubberman
retour
Hallo zusammen.
- erst sehen was das reg query ausspuckt
- mit findstr die relevanten Zeilen ausfiltern
- in der for Schleife den richtigen Teilstring in die Laufvariable packen
- die gleiche Prozedur für beide Schleifen
Versuch's mal nachzuvollziehen
Nicht der Rede wert.
Grüße
rubberman
Zitat von @60730:
Hab ich ihm abgenommen
tuts (wie zu erwarten war)
... doppelt hält auch besser Hab ich ihm abgenommen
tuts (wie zu erwarten war)
Zitat von @xxsadmin:
Manchmal frag ich mich wie Ihr Jungs sowas hinbekommt. Ich hätte nie und nimmer die Lösung gefunden.
Man bekommt das hin, indem man sich von innen nach außen vorarbeitet:Manchmal frag ich mich wie Ihr Jungs sowas hinbekommt. Ich hätte nie und nimmer die Lösung gefunden.
- erst sehen was das reg query ausspuckt
- mit findstr die relevanten Zeilen ausfiltern
- in der for Schleife den richtigen Teilstring in die Laufvariable packen
- die gleiche Prozedur für beide Schleifen
Versuch's mal nachzuvollziehen
Nicht der Rede wert.
Grüße
rubberman