Top-Themen

Aktuelle Themen (A bis Z)

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, 11283 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.

mfg
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 ..
Ähnliche Inhalte
Entwicklung
Registry - Werte und Schlüssel per Skript löschen
Frage von ArnoNymousEntwicklung3 Kommentare

Hi Leute, gibt es eine Möglichkeit per Skript in der Registry Werte und Unterschlüssel unter einem bestimmten Schlüssel zu ...

Microsoft Office
Excel - Werte bestimmter Zellen nach definierter Suche auslesen
gelöst Frage von Excel-StarterMicrosoft Office7 Kommentare

Hallo zusammen, ich bräuchte wieder einmal eure Hilfe für folgende Excelauswertung: Aus einer Lagerbestandsliste sollen jeweils für einen Artikel ...

Windows Systemdateien
Registry-Schlüssel per Batch auslesen und in Datei schreiben
gelöst Frage von PhilzipWindows Systemdateien9 Kommentare

Hallo zusammen, ich habe mir vorhin einen Befehl gebastelt, der die Installierte Version von NET Framework auslesen und in ...

Batch & Shell
Powershell: Wert aus Registry auslesen und mit vorhandenem Wert vergleichen
gelöst Frage von BrowserlauserBatch & Shell5 Kommentare

Hallo, ich stehe vor folgendem Problem: Ich möchte per Powershell aus der Registry einen bestimmten Wert auslesen. Beispiel: in ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 4 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 5 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1010 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell22 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen17 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Logging von "gesendeten Nachrichten" auf Terminalservern
gelöst Frage von Z3R0C0MM4N0THiN6Windows Server10 Kommentare

Hallo zusammen, kann mir jemand auf kurzem Wege sagen ob 1) die per Task-Manager (oder damals tsadmin) an Benutzer ...