tom2011
Goto Top

Registry wert in System Variable hinzufügen

Hi Leute

Ich möchte in Windows XP einen Registry wert Auslesen und in eine System Variable schreiben. Hat jemand einen Tipp wie das gehen könnte?

Vielen Dank
Kommentar vom Moderator Biber am 13.07.2010 um 20:53:46 Uhr
Verschoben von "Windows glaub ich" nach "Batch & Shell".

Content-ID: 146825

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

Biber
Biber 13.07.2010 um 16:54:23 Uhr
Goto Top
Moin Tom2011,

Ich möchte in Windows XP einen Registry wert Auslesen und in eine System Variable schreiben.
Einen bestimmten? Oder egal welchen - geht es mehr um die Technik?

Bei einigen Hex-Werten oder bei REG_EXPAND_SZ wird es sonst ein bisschen holzig...

Und verzeih mir meine laienhafte Frage: WTF ist eine System Variable?
Und soll mit dieser System Variable irgendetwas passieren oder lassen wir die erstmal im System rumhängen?

Grüße
Biber
Tom2011
Tom2011 13.07.2010 um 17:00:44 Uhr
Goto Top
Hi Biber

Ich möchte den Wert dieses Keys auslesen: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName] und anschliessend den Wert in eine Windows SystemVariable %NameVariable% einfügen. Mir geht es um die Technik wie ich das machen kann per Kommando Zeile oder so.

Mir der Variablen werden dann später andere Befehle per Kommando Zeile ausgeführt.

Gruss
Biber
Biber 13.07.2010 um 19:31:54 Uhr
Goto Top
Moin Tom2011,

bei WinXP ist (glaube ich) standardmäßig das nützliche Utility Reg.exe dabei - und "Reg Query" wird zum Auslesen von Werten oder Zweigen verwendet.

Spiel es einmal am CMD-Prompt nach
## nackte Demo
>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    DefaultUserName     REG_SZ  Biber


## nur die relevante Zeile ausgeben
>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName|find /i "DefaultUserName"
    DefaultUserName     REG_SZ  Biber


Ein bisschen lesbarer und vorbereitend für einen Batch

## Vorspiel
>set regkey="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

>set "regval=DefaultUserName"
## Proof-of-concept
>reg query %regkey% /v %regval%|find /i "%regval%"
    DefaultUserName     REG_SZ  Biber

## jetzt mit FOR/F nur das dritte Token der Zeile abgreifen - proof-of-concept mit "ECHO set" statt "set"
>for /f "tokens=3" %i in ('reg query %regkey% /v %regval%^|find /i "%regval%"') do @echo set "myvar=%i"
set "myvar=Biber"

##final am CMD-Prompt:mit "set" statt "echo set"
>for /f "tokens=3" %i in ('reg query %regkey% /v %regval%^|find /i "%regval%"') do @set "myvar=%i"
##test
> >set myvar
myvar=Biber

--> in einem Batch die Laufvariable der FOR-Anweisung als %%i statt %i schreiben.

Varianten dieser Mimik findest du im Bereich "Batch und Shell", u.a. auch Tutorials zum Auslesen/Setzen von Registry-Werten.

Grüße
Biber
60730
60730 13.07.2010 um 19:44:29 Uhr
Goto Top
Moin,
Zitat von @Tom2011:
Hi Biber

Ich möchte den Wert dieses Keys auslesen: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Winlogon\DefaultUserName] und anschliessend den Wert in eine Windows SystemVariable %NameVariable%
einfügen. Mir geht es um die Technik wie ich das machen kann per Kommando Zeile oder so.

Mir der Variablen werden dann später andere Befehle per Kommando Zeile ausgeführt.

Also in dem speziellen Beispiel, macht er Umweg nur unter Umständen Sinn.
  • Gib mal Set in einer Dosbox ein - oder andersherum,

deine Variable, die du auslesen willst - gibts schon - nennt sich %username%

Gruss
retour
Tom2011
Tom2011 13.07.2010 um 20:27:27 Uhr
Goto Top
HI Biber!

Vielen Dank- Ja genau das ist was ich suche! Soweit ist alles klar aber beim Proof of concept bekomme ich folgenden Fehler:

C:\>reg query %regkey% /v %regval%|find /i "%regval%"
ERROR: The system was unable to find the specified registry key or value.

Die Variablen %regkey% und %regval% sind aber gesetzt:

regkey="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
regval=DefaultUserName


Eine Idee was nicht stimmt?
60730
60730 13.07.2010 um 20:33:39 Uhr
Goto Top
Zitat von @Tom2011:
Eine Idee was nicht stimmt?
Wenn du vergleichst, was der sparsame Biber im Gegensatz zu deinem POC gesetzt hat - fällts dir auch auf.
C:\>reg query "%regkey%" /v %regval%|find /i "%regval%"  
Biber
Biber 13.07.2010 um 20:37:50 Uhr
Goto Top
Moin Tom2011,

Eine Idee was nicht stimmt?
Steht doch da.... die Variable %regkey% habe ich vollständif in Anführungszeichen gesetzt wegen des Leerzeichens in 'Windows NT'.
"Vollständig" unter Batchprofis meint "Ein Anführungszeichen vorn, eins am Ende". face-wink

Bei dir fehlt das schliessende Anführungszeichen.

Grüße
Biber
Tom2011
Tom2011 13.07.2010 um 20:39:36 Uhr
Goto Top
Hi

Ich kenne die Variable %username% aber wenn der User nicht angemeldet kann ich die nicht auslesen. Dann muss den weg oben gehen. Um den zuletzt angemeldeten User zu Identifizieren.

Gruss
Biber
Biber 13.07.2010 um 20:44:00 Uhr
Goto Top
Moin Tom2011,

das kann aber ein Unterschied sein - der "DefaultUsername" und der "LastLogonUsername".
Falls es wichtig ist...

Grüße
Biber
Tom2011
Tom2011 13.07.2010 um 20:47:48 Uhr
Goto Top
Hi all

Ich habe es gefunden es sind die "" die fehlten face-smile

Vielen Dank an alle!! Problem gelöst!

Schönen Abend noch!!