45455
Goto Top

Reg query für REG BINARY Wert

Hallo,

ich rätsele gerade etwas über reg query:

Der gesuchte Unterschlüssel enthält den Wert "Account Name" als REG_BINARY.
Da im diesem Wert bei den gewünschten Treffern immer der Domainname steht, wollte ich danach suchen (also @...)

Folgenden Befehl hab ich dafür verwendet (Domainnamen bei /f natürlich komplett)
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles" /v "Account Name" /t REG_BINARY /d /s /e /z /f 40006Bxxxxxxxx  

Dummerweise bekomme ich dann immer mehrere Ergebnisse, obwohl der Wert definitiv nur ein einziges Mal in diesem Zweig steht

Was mach ich falsch?

Gruß
Kai

Content-ID: 208814

Url: https://administrator.de/contentid/208814

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

rubberman
rubberman 29.06.2013 um 11:18:49 Uhr
Goto Top
Hallo blue0711,

dieser Key existiert auf meinem Rechner nicht. Vielleicht exportierst du den Schlüssel Profiles einfach mal in eine *.reg Datei. Dann kannst du ihn mit einem Texteditor selbst untersuchen oder du postest den Inhalt hier, dann kann man den Key fix mal in die eigene Registry importieren und den Code testen. Vermutlich findet sich dann auch eine Lösung...

Grüße
rubberman
colinardo
colinardo 29.06.2013 aktualisiert um 14:42:04 Uhr
Goto Top
Hallo Kai,
kann ich hier nachvollziehen. Scheint als wäre die rekursive Suche mit reg query sehr unzuverlässig, denn auch testweise durchgeführte Suchaktionen in anderen Schlüsseln brachten keine vernünftigen Ergebnisse (BUG ?).
Würde daher auf eine andere Methode z.B. via Powershell oder VBS zurückgreifen.
Für Powershell hätte ich da folgendes auf Lager:
$regpath = Get-ChildItem -recurse -Path "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"   
$accounts = @{}
foreach ($key in $regpath){
    $itm = Get-ItemProperty -Path $key.pspath -Name "Account Name" -ErrorAction SilentlyContinue  
    if ($itm){
        $accountData = $itm | select *
        $accounts[$accountData.pspath.Split(":")[2]] = [System.Text.Encoding]::Unicode.GetString($accountData."Account Name")  
    }
}
# Alternativ Ausgabe nur von Accounts die einen Domainnamen enthalten
#$onlyDomainNames = $accounts.getEnumerator() | ?{$_.Value -like "*@*"} | %{$_.Value.Split("@")[1]} 

#Ausgabe der Hashtable mit Registry-Pfaden und Account-Namen im Klartext
$accounts

Grüße Uwe
Susie1703
Susie1703 02.07.2013 um 15:56:22 Uhr
Goto Top
Huhu,

da klinke ich mich doch jetzt gerade mal mit ein....

@uwe: ich habe Dein Script mal ausprobiert und läuft auch ganz gut.
Bis auf das der Pfad in der Auflistung dann abgeschnitten wird. (ist aber nicht so wild da ich mir so oder so "$accountData.PSChildName" ausgeben lasse.)
Wobei es auch nett wäre zu wissen wie man das dem austreiben kann.

Nun stehe ich aber voll auf dem Schlauch und habe keine Ahnung wie dem sagen kann das er mir nur die "@yxz.de" anzeigen lassen soll.

Ich habe bei dem
 $accountData = $itm | select * 
mit WHERE hin und her probiert, aber irgendwie will das nicht so... Sollte auch noch dazu sagen das ich absoluter Powershell N00b bin face-smile

Ich habe mich schon ein wenig durch gegoogelt auch wegen dem abgeschnittenen text, aber irgendwie will alles was ich ausprobiert habe nicht so wie ich möchte.

Wäre super toll wenn du mir da ein wenig unter die Arme greifen könntest. Danke

LG Susie
colinardo
colinardo 02.07.2013 aktualisiert um 16:20:40 Uhr
Goto Top
Hallo Susie,
die Ausgabe wird nicht abgeschnitten, das sieht nur so aus weil die Powershell nicht genug Platz zum Anzeigen hat - die Werte sind jedoch vorhanden.
Für die Ausgabe nur der Domainnamen brauchst du eigentlich nur den kommentierten Abschnitt auskommentieren, aber zur Sicherheit poste ich nochmal das ganze Script dazu:

$regpath = Get-ChildItem -recurse -Path "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"   
$accounts = @{}
foreach ($key in $regpath){
    $itm = Get-ItemProperty -Path $key.pspath -Name "Account Name" -ErrorAction SilentlyContinue  
    if ($itm){
        $accountData = $itm | select *
        $accounts[$accountData.pspath.Split(":")[2]] = [System.Text.Encoding]::Unicode.GetString($accountData."Account Name")  
    }
}
# Alternativ Ausgabe nur von Accounts die einen Domainnamen enthalten
$onlyDomainNames = $accounts.getEnumerator() | ?{$_.Value -like "*@*"} | %{"$_.Value = $_.Name"}  
$onlyDomainNames
Dies gibt nur die Domainnamen aus.
wenn du nur die Registry-Pfade ausgeben willst kannst du das so machen:

$accounts.getEnumerator() | ?{$_.Value -like "*@*"} | %{$_.Name}  

Hinweis: Das Script filter nur Einträge die ein @ enthalten.

Grüße Uwe
gelöste Beitrage bitte auch als solche markieren.Danke
Susie1703
Susie1703 03.07.2013 aktualisiert um 08:19:14 Uhr
Goto Top
Hallo Uwe,

vielen lieben Dank, da kann ich mich heute dann gleich noch ein wenig ausleben und vielleicht verstehe ich das ganze dann auch mal face-smile

Ich sollte mir vielleicht doch mal eine "Powershell - Jetzt mach ich's mir selbst" PDF anschauen.


LG Susie
Biber
Biber 03.07.2013 aktualisiert um 18:09:48 Uhr
Goto Top
[OT]

Pssst, Susie1703, Überraschung,
Zitat von @Susie1703:
Ich sollte mir vielleicht doch mal eine "Powershell - Jetzt mach ich's mir selbst" PDF anschauen.

"Powershell" und "Jetzt mach ich's mir selbst" sind zwei ganz unterschiedliche PDFs.
Trotzdem viel Spass mit beiden.

Grüße
Biber
P.S. Eines der beiden habe ich auch schon komplett durchgearbeitet.
[/OT]
Susie1703
Susie1703 03.07.2013 um 14:31:45 Uhr
Goto Top
Zitat von @Biber:
[OT]

"Powershell" und "Jetzt mach ich's mir selbst" sind zwei ganz unterschiedliche PDFs.
Trotzdem viel Spass mit beiden.

Grüße
Biber
[/OT]
[OT]

Na toll, mein Chef liest hier mit, was der nun wieder von mir denkt face-smile

[/OT}

Aber davon mal abgesehen bin ich schon um einiges weiter mit meinem Script.

$regpath = Get-ChildItem -recurse -Path "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles"   
$accounts = @{}
foreach ($key in $regpath){
    $itm = Get-ItemProperty -Path $key.pspath -Name "Account Name" -ErrorAction SilentlyContinue  
    if ($itm){
        $accountData = $itm | select *
        $accounts[$accountData.pspath.Split(":")[2]] = [System.Text.Encoding]::Unicode.GetString($accountData."Account Name")  
		#$accounts[$accountData.PSChildName] = [System.Text.Encoding]::Unicode.GetString($accountData."Account Name") 
    }
	
	
}
# Alternativ Ausgabe nur von Accounts die einen Domainnamen enthalten

$onlyDomainNames = $accounts.getEnumerator() | ?{$_.Value -like "*@xyz.com*"} | %{$_.Name}  

foreach ($key in $onlyDomainNames){
	
	Set-Location HKCU:
	
	New-ItemProperty -Path $onlyDomainNames -Name "New Signature" -PropertyType Binary -Value ([byte[]](0x6b,0x00,0x68,0x00,0x69,0x00,0x6e,0x00,0x67,0x00,0x00,0x00))  
	New-ItemProperty -Path $onlyDomainNames -Name "Reply-Forward Signature" -PropertyType Binary -Value ([byte[]](0x6b,0x00,0x68,0x00,0x69,0x00,0x6e,0x00,0x67,0x00,0x00,0x00))  
	
	#Get-ItemProperty -Path $onlyDomainNames -Name "New Signature" 
}

Noch nicht Perfekt aber es wird... Er findet mir die Keys in denen meine "xyz.com"-Mailadressen drinne sind, in diese schreibe ich dann die Werte für "New Signature" und "Reply-Forward Signature" damit auch jeder unsere Signatur benutzt!

Das ganze wird dann noch eine Abfrage bekommen ob dieser Wert schon vorhanden ist, wenn dem so ist dann darf Powershell diesen anpassen.

Nochmal vielen Dank an Uwe...

LG Susie