sarekhl
Goto Top

Verwendung des Batch-Befehls REG für Werte vom Typ REG-EXPAND-SZ

Hallo zusammen,

ich mal eine Grundsatzfrage zur Verwendung des REG-Befehls.

Ich gehe von folgendem Registryeintrag aus:

step1

Wenn ich den exportiere, bekomme ich folgendes Eregbnis:

step2

Daraus mache ich jetzt eine Batch-Datei:

reg add HKCR\CLSID\TEST  /f /ve /t REG_EXPAND_SZ /d hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,34,00,33,00,00,00

Aber wenn ich den importiere, bekomme ich nicht den Ausgangswert, sondern folgendes:

step4

Wie muss ich das also in die Batch-Datei schreiben, um es richtig in die Registry zu schreiben? Und zwar mit REG ADD, nicht indem ich eine .reg-Datei importiere.


Danke im Voraus,
Sarek \\//_

Content-Key: 387950

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

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: 137289
137289 29.09.2018 aktualisiert um 10:13:24 Uhr
Goto Top
So:
reg add HKCR\CLSID\TEST /ve /f /t REG_EXPAND_SZ /d ^%systemroot^%\system32\imageres.dll,-1043

Binary Werte kannst du mit reg add nur mit dem Typ REG_BINARY schreiben, aber dazu dürfen dort dann nur die reinen Hex-Ziffern stehen ohne Kommata zusammengeschrieben und ohne das "Hex()". Aber dann ist der Wert nicht mehr vom Typ REG_EXPAND_SZ! Du musst also die 2 Byte Hex-Werte erst in einen Plaintext-String wandeln und eventuelle Umgebungsvariablen per ^ escapen und dann wie oben als REG_EXPAND_SZ schreiben.
Solche Hex-Daten kannst du per Powershell schnell in den dazugehörigen Text umwandeln:
$data = '25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,6d,00,61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,31,00,30,00,34,00,33,00,00,00'  
([regex]::Matches($data.replace(',',''),'(.{2})(.{2})').Captures | %{[char][convert]::ToInt32("$($_.Groups[2].Value)$($_.Groups[1].Value)",16)}) -join ''  

Gruß speedlink
Mitglied: SarekHL
SarekHL 29.09.2018 um 11:57:07 Uhr
Goto Top
Zitat von @137289:

So:
> reg add HKCR\CLSID\TEST /ve /f /t REG_EXPAND_SZ /d ^%systemroot^%\system32\imageres.dll,-1043
> 

Du musst also die 2 Byte Hex-Werte erst in einen Plaintext-String wandeln und eventuelle Umgebungsvariablen per ^ escapen und dann wie oben als REG_EXPAND_SZ schreiben.

Wenn ich das mache (genau Deine Zeile), steht hinterher als Wert nur \system32\imageres.dll,-1043 in der Registry, also die Umgebungsvariante ist weg face-sad
Mitglied: 137289
Lösung 137289 29.09.2018 aktualisiert um 12:35:12 Uhr
Goto Top
Nö. Der Befehl ist für die direkte Eingabe in die Konsole:

screenshot

Wenn du das natürlich in eine BATCHDATEI schreibst und damit ausführst musst du die Umgebungsvariable mit doppelten Prozentzeichen schreiben!
@echo off
reg add HKCR\CLSID\TEST /ve /f /t REG_EXPAND_SZ /d "%%systemroot%%\system32\imageres.dll,-1043"  
Mitglied: SarekHL
SarekHL 29.09.2018 um 13:17:49 Uhr
Goto Top
Zitat von @137289:

Wenn du das natürlich in eine BATCHDATEI schreibst und damit ausführst musst du die Umgebungsvariable mit doppelten Prozentzeichen schreiben!

Ahhhhhh, ok ;)
Warum haben die DOS-Erfinder das denn bloß so komisch konstruiert, dass man in einer Batchdatei Befehle anders angeben bis als in der Konsole face-sad
Mitglied: 137289
137289 29.09.2018 aktualisiert um 14:04:09 Uhr
Goto Top
Zitat von @SarekHL:
Warum haben die DOS-Erfinder das denn bloß so komisch konstruiert, dass man in einer Batchdatei Befehle anders angeben bis als in der Konsole face-sad
Nun ja ist ja auch schon eine Sprache aus dem letzten Jahrhundert :-P. Solle man endgültig mal abschneiden den alten Zopf. Ob das aber mit Winblows irgendwann mal passiert wage ich zu bezweifeln... Bis dahin ist Winblows hoffentlich schon in der Versenkung verschwunden, es gibt ja genügend Alternativen.
Mitglied: SarekHL
SarekHL 29.09.2018 um 14:25:58 Uhr
Goto Top
Zitat von @137289:

Nun ja ist ja auch schon eine Sprache aus dem letzten Jahrhundert :-P

Sogar aus dem letzten Jahrtausend ;)

Aber DOS ist halt das, was immer und überall funktioniert. PowerShell-Scripte sind auf vielen Systemen per Default daktiviert ....
Mitglied: 137289
137289 29.09.2018 aktualisiert um 14:52:01 Uhr
Goto Top
Zitat von @SarekHL:
Aber DOS ist halt das, was immer und überall funktioniert.
Ein Trugschluss, genau so viele Systeme blocken auch die.
PowerShell-Scripte sind auf vielen Systemen per Default daktiviert ....
Was sich simpelst umgehen lässt (denn sie wissen nicht was sie tun face-smile), aber das ist ein anderes Thema. Wenn ich vollkommene Unabhängigkeit will nehme ich lieber gleich ne Exe mit Betriebsystemfunktionen auf LowLevel Basis ohne Abhängigkeiten. Aber selbst die kann ein OS nicht zulassen (Applocker &Co.)