Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

bestimmten Registry Wert unter unbekanntem Schlüssel suchen und einen anderen Wert unter dem gefundenem Schlüssel auslesen

Frage Entwicklung Batch & Shell

Mitglied: figar0

figar0 (Level 1) - Jetzt verbinden

28.07.2009, aktualisiert 16:52 Uhr, 10545 Aufrufe, 14 Kommentare, 1 Danke

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)

01.
@echo off 
02.
cls 
03.
set SSW=Windows Resource Kit Tools 
04.
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 
05.
echo     %SSW% wurde leider nicht gefunden. 
06.
goto eol 
07.
:erfolg 
08.
echo     %SSW% wurde gefunden. 
09.
: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.
Mitglied: ralfkausk
28.07.2009 um 17:39 Uhr
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
Bitte warten ..
Mitglied: 60730
28.07.2009 um 17:59 Uhr
Servus,

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"

Gruß
Bitte warten ..
Mitglied: figar0
28.07.2009 um 18:22 Uhr
Danke für die Antworten, leider helfen sie mir aber nicht weiter.

Den Wert DisplayName kenne ich ja. Mit diesem Wert (in der obigen CMD=Windows Resource Kit Tools ) gehe ich ja auf die Suche...

Was ich als Ergebnis benötige, ist der Name des übergeordneten Registryschlüssels in dem der gesuchte DisplayName gefunden wurde (z.B. {FA237125-51FF-408C-8BB8-30C2B3DFFF9C}), oder aber der Inhalt des Wertes UninstallString in denselbem Schlüssel, in dem der Wert gefunden wurde (z.B. MsiExec.exe /I{FA237125-51FF-408C-8BB8-30C2B3DFFF9C}).
Bitte warten ..
Mitglied: rubberman
28.07.2009 um 19:19 Uhr
Naja, so schwer sollte das nicht sein.
Probier mal
01.
@echo off &setlocal 
02.
set "name=Bonjour" 
03.
for /f "tokens=7 delims=\" %%i in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\^|findstr "Uninstall\\\\{"') do ( 
04.
 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 
05.
06.
pause
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>
Bitte warten ..
Mitglied: 60730
28.07.2009 um 19:20 Uhr
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...

01.
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\uninstall | Find "DisplayName" >123.txt 
02.
for /f "tokens=6,7 delims=\" %%a in (123.txt) do echo %%b
Gruß
Bitte warten ..
Mitglied: figar0
29.07.2009 um 09:38 Uhr
@rubberman
Ja, das sieht gut aus...
ich habe aus dem Do echo %%i mal ein Set GGUID=%%i gemacht und schon habe ich den fertigen Aufruf.
Super, vielen Dank.

01.
@echo off 
02.
setlocal 
03.
set "name=Windows Resource Kit Tools" 
04.
for /f "tokens=7 delims=\" %%i in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\^|findstr "Uninstall\\\\{"') do ( 
05.
 for /f "tokens=2* delims=	" %%j in ('reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%%i^|findstr /c:"DisplayName	"^|findstr /c:"%name%"') do set GGUID=%%i 
06.
07.
echo msiexec /X%GGUID% /qr /norestart 
08.
pause
Ich muss aber leider zugeben, dass ich den Code nicht zu 100% verstehe. Werde mich wohl am Ende der Woche ein wenig genauer damit auseinander setzten.
Nochmals Vielen Dank, natürlich an alle, die geantwortet haben und auch an die, die es noch wollten
Bitte warten ..
Mitglied: figar0
29.07.2009 um 09:46 Uhr
@TimoBeil
Meinen Satz mit dem "leider helfen Sie mir aber nicht weiter..." war natürlich nicht böse gemeint, also gibt es keinen Grund sich zu entschuldigen.

Leider bekomme ich kein Ergebnis für "%%b". Daher würde mich nun aus reiner Neugierde interessieren, was Du als Ausgabe erwartet hattest?
Bitte warten ..
Mitglied: 60730
29.07.2009 um 09:51 Uhr
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ß
Bitte warten ..
Mitglied: xxsadmin
30.06.2011 um 18:48 Uhr
-
Bitte warten ..
Mitglied: xxsadmin
30.06.2011 um 19:09 Uhr
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
Bitte warten ..
Mitglied: rubberman
30.06.2011 um 22:51 Uhr
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:
01.
@echo off &setlocal 
02.
 
03.
set "name=Microsoft Choice Guard" 
04.
 
05.
for /f "tokens=7 delims=\" %%i in ( 
06.
  '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]*}"' 
07.
) do ( 
08.
  for /f "tokens=2*" %%j in ( 
09.
    'reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%%i" /v "DisplayName" 2^>nul^|findstr /iec:"%name%"' 
10.
  ) do echo %%i %%k 
11.
12.
pause
Nun liegt's noch an dir herauszufinden, ob das auch auf XP rennt

Grüße
rubberman
Bitte warten ..
Mitglied: 60730
30.06.2011 um 23:17 Uhr
Servus Rubberman
Zitat von rubberman:
Nun liegt's noch an dir herauszufinden, ob das auch auf XP rennt
Hab ich ihm abgenommen
tuts (wie zu erwarten war)
Grüße
rubberman

retour
Bitte warten ..
Mitglied: xxsadmin
01.07.2011 um 10:16 Uhr
Hallo rubberman,

Manchmal frag ich mich wie Ihr Jungs sowas hinbekommt. Ich hätte nie und nimmer die Lösung gefunden.

Auf jeden Fall funktioniert die Abfrage unter XP und Windows 7.

Nochmal vielen dank.

Mit freundlichen Grüßen
xxsadmin
Bitte warten ..
Mitglied: rubberman
01.07.2011 um 18:34 Uhr
Hallo zusammen.

Zitat von 60730:
Hab ich ihm abgenommen
tuts (wie zu erwarten war)
... doppelt hält auch besser

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:
- 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

Zitat von xxsadmin:
Nochmal vielen dank.
Nicht der Rede wert.

Grüße
rubberman
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
gelöst VBA: Wert von einer Website (pdf-Dokument) auslesen und in Excel kopieren (16)

Frage von Stern123 zum Thema VB for Applications ...

Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

Batch & Shell
Wert in einer TXT Datei suchen (11)

Frage von nolle99 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (12)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...