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

Reg query, Schlüsselname eines zu suchenden Wertes herausfinden

Frage Entwicklung Batch & Shell

Mitglied: quba

quba (Level 1) - Jetzt verbinden

08.02.2013 um 14:41 Uhr, 3348 Aufrufe, 12 Kommentare

Hallo zusammen,

ich bräuchte einen kleinen Denkanstoß bzw. Hilfe.

Es geht um ein Batch-Skript:
Ich suche in der registry nach einem bestimmten Wert und möchte den Schlüsselname als Rückgabe
erhalten der diesen Wert beinhaltet.

Leider bekomme ich das mit einem reg query in einer FOR /F Schleife nicht ganz hin.

Ich habe es hiermit versucht, aber so bekomme ich nur den gesuchten Wert (%wert%) angezeigt
nicht aber den Schlüsselnamen in dem dieser vorkommt.

01.
@echo OFF 
02.
 
03.
setlocal ENABLEEXTENSIONS 
04.
set KEY_NAME=HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 
05.
set VALUE_NAME=Account Name 
06.
set wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000 
07.
 
08.
For /F "tokens=4 delims=	 " %%i in ('REG QUERY "%KEY_NAME%" /s /v "%VALUE_NAME%" ^| findstr /i "%wert%"')  Do (  
09.
 
10.
 echo %%i   
11.
)
Ich hoffe mein Problem verständlich beschrieben zu haben.

Vielen Dank für Eure Hilfe

mfg
quba
Mitglied: DerWoWusste
08.02.2013 um 15:14 Uhr
Hi.

Schau Dir mal Bastlas Lösung hier an: http://www.administrator.de/forum/registry-op-per-skript-zweig-mit-best ... - sollte bei Dir abgewandelt anwendbar sein.
Bitte warten ..
Mitglied: quba
08.02.2013, aktualisiert um 16:04 Uhr
Hi,

danke dafür.
Leider werde ich daraus nicht ganz schlau oder schaffe es irgendwie nicht das richtig auf meine Bedürftnisse anzupassen
.....


update:
Nach Anpassung bekomme ich leider nur genau meinen Ausgangsschlüssel zurück, nicht den untergeordneten in dem der gesuchte Wert ist..
Bitte warten ..
Mitglied: DerWoWusste
08.02.2013 um 16:06 Uhr
Ok... ich schätze, Bastla kann und wird Dir helfen...warte nur ein Weilchen.
Ich bin da auch eher mittel talentiert.
Bitte warten ..
Mitglied: quba
08.02.2013 um 16:07 Uhr
Trotzdem danke für deine Bemühungen bzw. deinen Hinweis!
Bitte warten ..
Mitglied: bastla
08.02.2013 um 16:43 Uhr
Hallo quba!

Wie DWW schon sagte, sollte eigentlich der Ansatz aus dem verlinkten Thread auch hier passen - etwa so:
01.
@echo OFF & setlocal 
02.
set "KEY_NAME=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676" 
03.
set "VALUE_NAME=Account Name" 
04.
set "wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000" 
05.
 
06.
for /f "delims=" %%a in ('reg query "%KEY_NAME%"') do ( 
07.
    if not defined Done for /f "delims=" %%b in ('reg query "%%a" 2^>nul') do ( 
08.
        if not defined Done for /f "delims=" %%c in ('reg query "%%b" 2^>nul') do ( 
09.
            if not defined Done reg query "%%c\" /s 2>nul|findstr /ic:"%VALUE_NAME%">nul && (echo "%%c" & set Done=true) 
10.
11.
12.
)
Grüße
bastla
Bitte warten ..
Mitglied: quba
08.02.2013, aktualisiert um 17:03 Uhr
Hallo bastla,

vielen Dank für deine schnelle Hilfe.

Leider funktioniert das so nicht. Wenn ich das Script so ausführe (nach Änderung der Zeile 9 -> |findstr /ic:"%wert%" - Da ich ja nach diesem Wert suchen möchte) erscheint keine Ausgabe...

Grüße
quba

edit:
Zusätzlich habe ich auch noch im letzten query den Backslash entfernt (reg query "%%c" /s )
Dann erhalte ich den Registry Key komplett jedoch nicht den richtigen Schlüssel...

"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"

aber es müsste eigentlich sein:

"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000001"
(unter diesem Schlüssel ist der gesuchte Wert: "Account Name=4D0069.......)
Bitte warten ..
Mitglied: bastla
08.02.2013 um 17:13 Uhr
Hallo quba!

Wenn es nur eine Unterschlüsselebene gibt (anderenfalls bitte Dein Ergebnis von
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676" /s
posten), sollte sich das noch kürzer (und genauer) formulieren lassen:
01.
@echo OFF & setlocal 
02.
set "KEY_NAME=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676" 
03.
set "VALUE_NAME=Account Name" 
04.
set "wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000" 
05.
 
06.
for /f "delims=" %%a in ('reg query "%KEY_NAME%"') do ( 
07.
    if not defined Done for /f "delims=" %%c in ('reg query "%%a\" 2^>nul') do ( 
08.
        if not defined Done reg query "%%c\" /s 2>nul|findstr /ic:"%VALUE_NAME%"|findstr /ic:"%wert%">nul && (echo "%%c" & set Done=true) 
09.
10.
)
Bei meinem Test (mit einem %wert%, der bei mir existiert) war das Ergebnis jedenfalls
"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messagin 
g Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000001"
Grüße
bastla
Bitte warten ..
Mitglied: quba
08.02.2013, aktualisiert um 17:23 Uhr
Hallo bastla,

es kann mehrere Unterschlüssel geben
00000001
00000002
00000...
...

In meinem Fall sieht der ausgeführte Befehl

reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676" /s

so aus:

01.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging 
02.
 Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676 
03.
    {ED475418-B0D6-11D2-8C3B-00104B2A6676}    REG_BINARY    02000000 
04.
    LastChangeVer    REG_BINARY    2100000000000000 
05.
    {ED475419-B0D6-11D2-8C3B-00104B2A6676}    REG_BINARY    01000000 
06.
    {ED475420-B0D6-11D2-8C3B-00104B2A6676}    REG_BINARY    0200000004000000 
07.
    NextAccountID    REG_DWORD    0x5 
08.
 
09.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging 
10.
 Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000001 
11.
    clsid    REG_SZ    {ED475414-B0D6-11D2-8C3B-00104B2A6676} 
12.
    Mini UID    REG_DWORD    0x7255aa70 
13.
    Service Name    REG_BINARY    43004F004E005400410042000000 
14.
    Service UID    REG_BINARY    248C708FAA47C54A94559270DF02F79C 
15.
    MAPI Provider    REG_DWORD    0x2 
16.
    Account Name    REG_BINARY    4F00750074006C006F006F006B002D0041006400720065 
17.
007300730062007500630068000000 
18.
    New Signature    REG_BINARY    430049002D005300690067006E000000 
19.
    Reply-Forward Signature    REG_BINARY    430049002D005300690067006E000000 
20.
    XP Capabilities    REG_DWORD    0x1 
21.
 
22.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging 
23.
 Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000002 
24.
    clsid    REG_SZ    {ED475414-B0D6-11D2-8C3B-00104B2A6676} 
25.
    Mini UID    REG_DWORD    0x8efe7c46 
26.
    Service Name    REG_BINARY    4D00530045004D0053000000 
27.
    Service UID    REG_BINARY    85571667B323CC438A5520AFE99AF64C 
28.
    MAPI Provider    REG_DWORD    0x5 
29.
    Identity Eid    REG_BINARY    00000000DCA740C8C042101AB4B908002B2FE182010000 
30.
00000000002F4F3D43484F504152442F4F553D4249524B454E46454C442F434E3D52454349504945 
31.
4E54532F434E3D4B55424154534348454B4D393939333131363200 
32.
    XP Status    REG_DWORD    0x1 
33.
    XP Capabilities    REG_DWORD    0x2 
34.
    XP Provider UID    REG_BINARY    7D5ABD5B7CAF8A43BC336ACC42938C94FD40527BF1F 
35.
A78478113DD08775EB56A 
36.
    Account Name    REG_BINARY    4D006900630072006F0073006F00660074002000450078 
37.
006300680061006E00670065000000 
38.
    New Signature    REG_BINARY    6B00750062006100740073006300680065006B006D000 
39.
000 
40.
    Reply-Forward Signature    REG_BINARY    28006F0068006E00650029000000 
41.
 
42.
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging 
43.
 Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000004 
44.
    clsid    REG_SZ    {ED475414-B0D6-11D2-8C3B-00104B2A6676} 
45.
    Mini UID    REG_DWORD    0xc9e004c4 
46.
    Service Name    REG_BINARY    450056004D00530050000000 
47.
    Service UID    REG_BINARY    AE7ECCF1D8F03D4ABB454441E5D070E1 
48.
    MAPI Provider    REG_DWORD    0x4 
49.
    Account Name    REG_BINARY    5600610075006C00740020002D0020004B007500620061 
50.
00740073006300680065006B002C0020004D00690063006800610065006C000000 
51.
 
Danke und Gruß

Gruß
quba
Bitte warten ..
Mitglied: bastla
08.02.2013 um 17:27 Uhr
Hallo quba!
es kann mehrere Unterschlüssel geben
Klar (sonst müsste ja nicht nach dem richtigen gesucht werden ), aber diese befinden sich alle auf einer Ebene (also direkt unter "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676") und nicht tiefer verschachtelt - daher sollte mein zweiter Vorschlag eigentlich passen ...

Grüße
bastla
Bitte warten ..
Mitglied: quba
08.02.2013, aktualisiert um 18:01 Uhr
Hallo bastla,

das ist so nicht richtig, der gesuchte Wert "Account Name" befindet sich in diesem Fall im Unterschlüssel "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\0000002"
Genau diesen suche ich damit ich damit weiter arbeiten kann....

Grüße
quba
Bitte warten ..
Mitglied: bastla
08.02.2013, aktualisiert um 23:37 Uhr
Hallo quba!
das ist so nicht richtig, der gesuchte Wert "Account Name" befindet sich in diesem Fall im Unterschlüssel
Ich hab ja auch nix anderes behauptet (sondern nur gesagt, dass die Unterschlüssel nicht noch weiter verschachtelt, sondern alle auf einer Ebene sind) ...

... und, wie gesagt, bei meinem Test mit diesem Ansatz klappt's auch mit dem Wunschergebnis - und wie ist das bei Dir, hast Du das überhaupt schon getestet?

Eine andere Variante könnte übrigens so aussehen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set "KEY_NAME=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676" 
03.
set "VALUE_NAME=Account Name" 
04.
set "wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000" 
05.
 
06.
for /f "delims=" %%a in ('reg query "%KEY_NAME%" /s ^|findstr /i "HKEY_CURRENT_USER %wert%"') do ( 
07.
    if not defined TheKey ( 
08.
        echo "%%a"|findstr /i "HKEY_CURRENT_USER">nul && set "Key=%%a" 
09.
        echo "%%a"|findstr /ic:"%VALUE_NAME%"|findstr /ic:"%wert%">nul && set "TheKey=!Key!" 
10.
11.
12.
if not defined TheKey echo Nicht gefunden! & pause & goto :eof 
13.
echo "%TheKey%"
Grüße
bastla
Bitte warten ..
Mitglied: quba
09.02.2013, aktualisiert um 13:40 Uhr
Hi bastla,

klar hab ich deinen vorhergehenden Vorschlag ausprobiert,
jedoch wie schon erwähnt, hatte ich damit keinen Erfolg.

Mit deinem letzten Code jedoch funktioniert es jetzt wie gewünscht!

Vielen herzlichen Dank für deine Hilfe und Bemühungen!
Es lohnt sich doch immer wieder hier um Rat zu fragen, hier sind Profis am Werk

Wünsche ein schönes Wochenende!

Grüße
quba
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 10
REG Query HKLM (3)

Frage von AtoAto zum Thema Windows 10 ...

Windows Server
gelöst SCCM2012 Abfrage eines Registry Wertes (5)

Frage von busteron zum Thema Windows Server ...

Server-Hardware
gelöst Netzteil Watt Power herausfinden (6)

Frage von M.Marz zum Thema Server-Hardware ...

Netzwerke
Clientname anhand MAC Adresse herausfinden (13)

Frage von VerruecktesPferd zum Thema Netzwerke ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...