Batch: Informationen Aus Registry Auslesen
#1
geschrieben 03. Juli 2008 - 12:18
Ich hab so nen zusätzlichen Auftrag erhalten wo ich ne Batch Datei schreiben soll, welche Informationen aus der Registry auslesen soll und dann in ein Log File schreiben soll. Das Problem ist, ich habe mit Batch noch nie Informationen aus der Registry ausgelesen. Google zeigt mir auf den ersten Blick nur Sachen mit C++ oder ähnlichem.
Anzeige
#2
geschrieben 03. Juli 2008 - 12:24
FOR /F "skip=2 usebackq tokens=3 delims= " %%i IN (`reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v RegisteredOwner`) DO set C:\reg.txt
Könnte funktionieren, kanns aber nicht testen.
Dieser Beitrag wurde von Samstag bearbeitet: 03. Juli 2008 - 12:24
#3
geschrieben 03. Juli 2008 - 12:33
Um konkret zu werden. Ich muss folgende Sachen aus der Registry auslesen können (wenn möglich):
- Partitionen
- Dateisystem der Partitionen
- Berechtigungen (bin mir nicht sicher ob sowas geht mit Batch)
- Anzeigeeinstellungen
- Tastaturlayout
Dieser Beitrag wurde von Erte bearbeitet: 03. Juli 2008 - 13:58
#4
geschrieben 03. Juli 2008 - 14:42
FOR /F "skip=2 usebackq tokens=3 delims= " %i IN (`reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion" /v RegisteredOwner`) DO set C:\reg.txt
Das andere mit den %% ist für eine Batch, und nach der wurde ja eigentlich gefragt?
Dieser Beitrag wurde von Samstag bearbeitet: 03. Juli 2008 - 14:42
#5
geschrieben 03. Juli 2008 - 14:46
Hast du evtl. ne Idee wo ich die oben geschriebenen Informationen auslesen könnte?
Hab mal die Registry nach gewissen Stichwörtern durchsucht, aber kommt nichts brauchbares.
Dieser Beitrag wurde von Erte bearbeitet: 03. Juli 2008 - 14:47
#6
geschrieben 03. Juli 2008 - 15:24
Super einfach und super mächtig. Damit müsste das gehen.
Es lässt sich damit auch leicht eine Standalone-Exe erstellen.
#7
geschrieben 03. Juli 2008 - 15:39
; Filesystem:
$var = DriveGetFileSystem( "c:\" )
MsgBox(4096,"File System Type:", $var) // liefert z.b. "NTFS"
; Rechte (Siehe Doku)
If IsAdmin() Then MsgBox(0, "", "Admin rights detected")
; Tastaturlayout
$var = @KBLayout
MsgBox(4096,"Keyboard Layount:", $var) // siehe Doku
; Anzeigeeinstellung:
$var=@DesktopHeight ; Height of the desktop screen in pixels. (vertical resolution)
$var=@DesktopWidth ; Width of the desktop screen in pixels. (horizontal resolution)
$var=@DesktopDepth ; Depth of the desktop screen in bits per pixel.
$var=@DesktopRefresh ; Refresh rate of the desktop screen in hertz.
; Für Partitons/Drive-Info gib's folgende Funktionen:
; DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus
#8
geschrieben 03. Juli 2008 - 16:03
#9
geschrieben 03. Juli 2008 - 16:26
Schau mal bei Windows Resource Kit. Und da ist auch ein tool dabei mit dem du die Registry per CMD bearbeiten kannst.
Kannst die .exe datei ja einfach im selben verzeichnis wie die batch datei kopieren.
Grüße Honos
*Link*
Dieser Beitrag wurde von honos bearbeitet: 03. Juli 2008 - 16:27
#10
geschrieben 03. Juli 2008 - 16:53
Achso, auf der CD?
Dieser Beitrag wurde von Erte bearbeitet: 03. Juli 2008 - 16:56
#11
geschrieben 03. Juli 2008 - 16:56
Nur die Exe reicht schon.
Zum Entwickeln und Testen musst Du natürlich AutoIt installiert haben.
#13
geschrieben 04. Juli 2008 - 07:07
Bin euch wirklich dankbar für den Tipp mit AutoIt. Ich habe mal deinen Code den du gepostet hast eingefügt und kompiliert. Das Erste mit dem Filesystem geht, jedoch gibt er ihm nachhinein einen Error aus:
AutoIt Error
Line -1:
Error: Illegal text at the end of statement (one statement per line).
Na ja jedenfalls, kann ich in AutoIt irgendwie Sprungmarken definieren oder geht der einfach alles der Reihe nach? Und kann mir wer ne gute Tutorial Seite für AutoIt geben? Ich blick zwar einigermassen durch bei dem Code, nur weiss ich z. B. nicht genau wie ich dem sagen kann dass wen er das Dateisystem postet, noch einen Satz wie "Das Dateisystem von C: ist: NTFS". Ein Tutorial wär zumindest mal ein Anfang, aber ich google auch nochn bisschen.
#14
geschrieben 04. Juli 2008 - 16:27
Aber schau Dir einfach mal die Beispiele zu den einzelnen Befehlen in der Hilfe an.
Ist wirklich sehr einfach!
Gotos und Sprungmarken gibt es nicht - ist ja unter Programmierern verpöhnt ;O)
Mach das lieber mit if .. then .. endif oder if .. then .. else endif - Konstruktionen.
hier nochmal die überarbeitete Version, sorry hatte das nur schnell eingetippt - eher schematisch:
(Mit If .. then .. else)
; Filesystem:
$var = DriveGetFileSystem( "c:\" )
MsgBox(0,"File System Type:", $var) ; liefert z.b. "NTFS"
; Rechte (Siehe Doku)
If IsAdmin() Then
MsgBox(0, "Admin rights:", "Admin rights detected")
else
MsgBox(0, "Admin rights:", "No Admin rights detected")
Endif
; Tastaturlayout
$var = @KBLayout
MsgBox(0,"Keyboard Layount:", $var) ; siehe Doku
; Anzeigeeinstellung:
MsgBox(0,"Bildschirm Höhe:",@DesktopHeight )
MsgBox(0,"Bildschirm Breite:",@DesktopWidth )
MsgBox(0,"Bildschirm Refresh Rate:",@DesktopRefresh )
; Für Partitons/Drive-Info gib's folgende Funktionen:
; DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus
Dieser Beitrag wurde von MacGyver bearbeitet: 04. Juli 2008 - 16:32
#15
geschrieben 06. Juli 2008 - 13:14
Danke dir für deine Hilfe. Hab mich während des wartens mal selber an die Arbeit gemacht, und dabei ist folgendes rausgekommen:
;Anzeigeeinstellungen $var = @DesktopWidth $var2 = @DesktopHeight $var3 = @DesktopDepth $var4 = @DesktopRefresh MsgBox(64, "Auflösung", "Die Auflösung beträgt " & $var & " x " & $var2 & @CRLF & "Die Farbtiefe beträgt " & $var3 & " bit" & @CRLF & "Die Bildwiederholfrequenz beträgt " & $var4 & " Hertz") ;Datum $var5 = @MDAY $var6 = @MON $var7 = @YEAR MsgBox(64, "Datum", "Laut System ist heute der " & $var5 & "." & $var6 & "." & $var7) ;Tastaturlayout $var8 = @KBLayout if $var8 = 0807 then $var8 = "Deutsch Schweiz" else $var8 = "nicht Deutsch Schweiz!" endif MsgBox(64, "Spracheinstellungen", "Das Tastaturlayout ist " & $var8) MsgBox(64, "Spracheinstellungen", "Es wird sich ein Fenster öffnen zur Überprüfung der Standorteinstellung (ganz unten im Fenster)") run ("rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0") ;Laufwerke $var10 = DriveGetDrive( "all" ) $drives = "" If NOT @error Then For $i = 1 to $var10[0] $drives = $drives & @CRLF &$var10[$i] Next EndIf MsgBox(64,"Alle Laufwerke", $drives)
;Laufwerke hab ich aus einem anderen Board, nur versteh ich den Teil beim if nicht ganz. Was $i = 1 to $var10[0] ......
bedeuten soll. Hab da irgendwo unter Google ne Definition gefunden von dem, aber find's irgendwie nicht mehr.