Top-Themen

Aktuelle Themen (A bis Z)

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 Registrywert mittels Batch ändern

Mitglied: tomost

tomost (Level 1) - Jetzt verbinden

16.11.2007, aktualisiert 20.11.2007, 9885 Aufrufe, 9 Kommentare

Tag zusammen,
ich hab hier im Forum schon ein wenig geforscht aber leider nicht die passende Lösung gefunden, bzw. gefunden schon, klappt aber bei meiner Datei nicht.
Ich möchte mittels einer batch einen Teil der Registry in eine textdatei exportieren, darin einen Wert ändern und dann wieder in die Registry importieren.
Ex- und import ist kein Problem das schaff ich, nur den Wert ändern, da haperts.
Ich hab hier im Forum schon ein vbs script gefunden was search and replace macht, aber damit wird meine txt Datei zerstört.
Ich vermute es liegt daran das jede menge Sonderzeichen ({,@,:, usw.) darin enthalten sind.
Um genauer zu werden:
Ich möchte in meiner export-datei die folgenden Inhalt hat:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}]
@="Netzwerkadapter"
"Class"="Net"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\Descriptions]
"Broadcom NetXtreme 57xx Gigabit Controller"=hex(7):31,00,00,00,00,00
"Intel(R) PRO/Wireless 3945ABG Network Connection"=hex(7):31,00,00,00,00,00
"Asynchroner RAS-Adapter"=hex(7):31,00,00,00,00,00
"WAN-Miniport (L2TP)"=hex(7):31,00,00,00,00,00
"WAN-Miniport (PPTP)"=hex(7):31,00,00,00,00,00
"WAN-Miniport (PPPOE)"=hex(7):31,00,00,00,00,00
"Parallelanschluss (direkt)"=hex(7):31,00,00,00,00,00
"WAN-Miniport (IP)"=hex(7):31,00,00,00,00,00
"Deterministic Network Enhancer Miniport"=hex(7):31,00,00,00,32,00,00,00,33,00,\
00,00,34,00,00,00,00,00
"Cisco Systems VPN Adapter"=hex(7):31,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{008BFB96-5C7B-43B5-ACCC-012F2C0710D9}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{008BFB96-5C7B-43B5-ACCC-012F2C0710D9}\Connection]
"PnpInstanceID"="ROOT\\NET\\0000"
"MediaSubType"=dword:00000001
"Name"="LAN-Verbindung 2"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5549A6BD-AD05-47EF-947C-E709B5981798}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5549A6BD-AD05-47EF-947C-E709B5981798}\Connection]
"PnpInstanceID"="PCI\\VEN_14E4&DEV_1600&SUBSYS_01C21028&REV_02\\4&378EDFA4&0&00E2"
"MediaSubType"=dword:00000001
"Name"="LAN-Verbindung"
"ShowIcon"=dword:00000000
"IpCheckingEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{A41ED87D-7219-48F7-8BE5-11257E5B80CF}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{A41ED87D-7219-48F7-8BE5-11257E5B80CF}\Connection]
"PnpInstanceID"="PCI\\VEN_8086&DEV_4222&SUBSYS_10218086&REV_02\\4&360A6DE&0&00E1"
"MediaSubType"=dword:00000002
"Name"="Drahtlose Netzwerkverbindung"
"ShowIcon"=dword:00000000
"IpCheckingEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{DD9675F8-99EB-4ED3-ADA9-F70C33A90BFB}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{DD9675F8-99EB-4ED3-ADA9-F70C33A90BFB}\Connection]
"PnpInstanceID"="ROOT\\NET\\0000"
"MediaSubType"=dword:00000001
"Name"="LAN-Verbindung 3"


Die Zeile, oder Zeilen
"ShowIcon"=dword:00000000
durch
"ShowIcon"=dword:00000001

ersetzen.

Ich will eigentlich "nur" das Icon für die Netzwerkkarte IMMER und für jeden User in der Taskleiste anzeigen lassen. (Windows XP)
Und das mit Bordmitteln, da ich nur dafür nicht extra Software kaufen und installieren möchte.
Da wir die Software mittels Symantec LiveState Delivery verteilen und Installieren, brauch ich eben die Bordmittel.
Ich hoffe es kann mir jemand helfen.

Danke schonmal
tomost
Mitglied: bastla
16.11.2007 um 21:32 Uhr
Hallo tomost und willkommen im Forum!

Ich hab hier im Forum schon ein vbs script gefunden was search and replace macht, aber damit wird meine txt Datei zerstört.
Hoffentlich meintest Du in einem anderen Forum ...

Für hier würde ich mir nämlich eher so etwas erwartet haben:
01.
'SetShowIconInRegFile.vbs
02.
Set fso = CreateObject("Scripting.FileSystemObject")
03.
sNewRegText = Replace(fso.OpenTextFile(WScript.Arguments(0), 1).ReadAll, _
04.
	"""ShowIcon""=dword:00000000", """ShowIcon""=dword:00000001")
05.
fso.OpenTextFile(WScript.Arguments(1), 2, True).Write sNewRegText
damit bei einem Aufruf der Art
01.
cscript //nologo C:\Scripts\SetShowIconInRegFile.vbs OldRegFile.txt NewRegFile.txt
nix zerstört, sondern sogar noch etwas neu geschaffen wird.

Grüße
bastla

[Edit] Inzwischen hat ahe erklärt, wie es zur "Zerstörung" gekommen sein dürfte: Du hast versucht, unmittelbar die exportierte Datei zu verändern, ohne sie vorher in eine (ASCII/ANSI-)Textdatei zu konvertieren - damit käme auch mein obiges Script nicht zurecht, daher gibt es unten die Unicode-taugliche Variante. [/Edit]
Bitte warten ..
Mitglied: ahe
17.11.2007 um 13:47 Uhr
Hallo Bastla,

wäre es nicht wünschenswert das Ganze direkt über die Reg-Datei laufen zu lassen, ohne den Zwischenschritt über die Txt-Datei?

Ich bastel (allerdings mit wenig Erfolg) an einer Batch Lösung und mußte feststellen, dass es einige Probleme zu umschiffen gibt.

Das Problem ist, dass Reg-Dateien im Unicode Format abgespeichert werden. Durch die folgende Zeile kann man die Datei dann in ANSI umwandeln, womit dann auch diverse bordeigene Tools dann keine Probleme mehr haben (z. B. FINDSTR):
type org_export.reg >neu_export.reg

Wenn man jetzt Dein VB Script über die Datei neu_export.reg laufen läßt, dann funktioniert es, sonst kommt (bei mir) leider etwas sehr komisches heraus...

(laut https://www.administrator.de/.reg-Datei_mit_CMD_oder_VBS_auslesen.html sollte es ja mit dem Parameter True eigentlich ja gehen...)

Bei meinen Tests mittels Batch hatte ich bislang mit der Ersetzung von den Werten ein Problem:

Ich ging 'mal davon aus, dass die exportieren Regdateien für jeden Rechner unterschiedlich aussehen.

Wenn die ID's immer identisch wären, wäre es ja mit den folgenden Zeilen oder einer eigenen Reg-Datei getan:

01.
set "KEY=HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"
02.
 
03.
REG ADD "%KEY%\{5549A6BD-AD05-47EF-947C-E709B5981798}\Connection" /V ShowIcon /t REG_DWORD /d 1
04.
REG ADD "%KEY%\{A41ED87D-7219-48F7-8BE5-11257E5B80CF}\Connection" /V ShowIcon /t REG_DWORD /d 1
05.
...
Da aber vermutlich diverse unterschiedliche Netzwerkkarten mit eigenen ID's im Einsatz sind, muss man die Reg-Datei durchsuchen.

Ich weiss nicht, welche Tests schon gemacht wurden...

Falls es mit findstr versuchst wurde, muss als erstes die Reg-Datei von Unicode nach ANSI umgewandelt werden (umbenennen reicht da nicht!). Z. B. so: type network.reg >.\network2.reg
Danach bekommst man auch etwas zurück (bei mir z. B.):
01.
findstr "ShowIcon" network2.reg
02.
 
03.
"ShowIcon"=dword:00000001
04.
"ShowIcon"=dword:00000001
05.
"ShowIcon"=dword:00000001
06.
"ShowIcon"=dword:00000001
07.
"ShowIcon"=dword:00000000
Alternativ funktioniert der Befehl find auch direkt auf Reg-Dateien.

01.
find "ShowIcon" .\network.reg
02.
 
03.
---------- .\NETWORK.REG
04.
"ShowIcon"=dword:00000001
05.
"ShowIcon"=dword:00000001
06.
"ShowIcon"=dword:00000001
07.
"ShowIcon"=dword:00000001
08.
"ShowIcon"=dword:00000000

Script-Idee "geklaut" von einem Deiner 'älteren' Scripts und Bibers Batch-Tut's auf Basis der ANSI-Datei:

Dabei soll die Reg-Datei zeilenweise durchgegangen werden und diese Zeilen in eine neue Datei hineingeschrieben werden. Die Ersetzung des alten Eintrags durch den neuen Eintrag soll dabei durch folgendes gemacht werden:
01.
set Line=!Line:%Von%=%Nach%!
Der gesamte Code:
01.
@echo off & setlocal enabledelayedexpansion
02.
set "Datei=%temp%\network.reg"
03.
set "NeueDatei=%temp%\neu_network.reg"
04.
set "Von="ShowIcon"=dword:00000000"
05.
set "Nach="ShowIcon"=dword:00000001"
06.
if exist "%NeueDatei%" del "%NeueDatei%"
07.
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%NeueDatei%"
Leider funktioniert diese Lösung nicht, ich denke es liegt zum Einen an den vielen Hockkommas und zum Anderen wieder einmal an der Auswertungsreihenfolge der Parameter... (die Datei neu_network.reg wird nicht erzeugt...) oder aber an den vielen Sonderzeichen in der Reg-Datei...

mfg
Axel
Bitte warten ..
Mitglied: Biber
17.11.2007 um 15:28 Uhr
Moin ahe,

für den letzten Teil Deiner Lösungsansatzes würde ich eine andere Strategie wählen.
Zwei Batch-Eigenheiten (die bei bastla's Ansatz mit VBSkript gar nicht relevant sind) müssen berücksichtigt werden.

1. In den Reg-Dateien sind einige der LeerZEILEN erforderlich, damit es sich mit RegEdit wieder importieren lässt.
Und die FOR/F-Anweisung ignoriert (de facto) Leerzeilen und gibt von daher auch keine aus.
2. Ein anderes Problem ist gleich an zwei Stellen das Gleichheitszeichen.
Wenn Du es am CMD-Prompt testest, siehst du, dass ein Ersetzen eines Strings in einer Variable mit "Gleichheitszeichen-im-Wert"
mit der eingebauten CMD-Ersetz-Funktion Akrobatik ist, wenn nicht gar unmöglich.
01.
set varbla="Bla"=blubb
02.
$cmd$echo Origin[%varbla%] Clone[%varbla:blubb=sülz%]
03.
Origin["Bla"=blubb] Clone["Bla"=sülz]
04.
## soweit okay, aber jetzt die Variante, die Du versuchst:
05.
$cmd$echo Origin[%varbla%] Clone[%varbla:"Bla"=blubb="Bla"=sülz%]
06.
Origin["Bla"=blubb] Clone[blubb="Bla"=sülz=blubb]
-->wie Du siehst, wird ab dem ersten =-Zeichen ersetzt....

Also würde ich (falls bastla und seine Lösungen grad nicht greifbar wären und ich irgendwas aus Batch zaubern müsste) es so machen:

01.
::---CloneReg.bat 
02.
@echo off & setlocal
03.
If "%~1"=="" %0 network.reg
04.
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ "%~1"') do (
05.
 if "%%j"=="" (echo.) ELSE (  
06.
 For /f "delims== tokens=1,2*" %%x in ("%%j") do (
07.
    If "%%y"=="" (echo %%x) ELSE ( 
08.
    If /i "%%~x"=="ShowIcon" (echo %%x=dword:00000001) Else echo %%x=%%y
09.
))))
Diese CloneReg.bat aufrufen mit dem dem Namen der Originaldatei (z.B. Network.reg) und, falls mir das Ergebnis auf dem Bildschirm zusagt, das ganze nochmal aufrufen und das Ergebnis umleiten in eine neue Datei.
01.
CloneReg %temp%\network.reg >>neu_network.reg.
Aber, wie Du siehst, ist eine Batch-Lösung hier im Vergleich zu VBSkript elendiglich lang.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
17.11.2007 um 17:28 Uhr
Hallo ahe!

wäre es nicht wünschenswert das Ganze direkt über die Reg-Datei laufen zu lassen, ohne den Zwischenschritt über die Txt-Datei?
Abgesehen davon, dass die Txt-Datei nicht meine Erfindung war, hast Du natürlich Recht - das macht dann aber das Script natürlich länger (besonders, wenn ich das Ergebnis auch wieder in Unicode schreibe - noch ein " ,True" mehr ):
01.
'SetShowIconInNativeRegFile.vbs
02.
Set fso = CreateObject("Scripting.FileSystemObject")
03.
sNewRegText = Replace(fso.OpenTextFile(WScript.Arguments(0), 1, , True).ReadAll, _
04.
	"""ShowIcon""=dword:00000000", """ShowIcon""=dword:00000001")
05.
fso.OpenTextFile(WScript.Arguments(1), 2, True, True).Write sNewRegText
Grüße
bastla
Bitte warten ..
Mitglied: ahe
19.11.2007 um 09:59 Uhr
Hallo Ihr,

ich sollte mich wohl doch mehr mit VB Script befassen (seufz) ...

@Biber: Beim Herumprobieren hatte ich zwischendurch auch schon 'mal den Effekt, dass alles, was hinter dem Gleichheitszeichen war, abgetrennt war. Die erzeugte Reg-Datei sah dann doch recht seltsam aus...

Ich glaube auch, dass Bastla's Lösung der elegantere Weg ist.

@bastla: In Unicode schreiben ist ja eigentlich hier nicht notwendig (es sei denn, man hat es mit speziellen Zeichen aus dem Unicode Bereich zu tun, bei DWORD hoffentlich seltener).
Deine Lösung ist, finde ich, schön kurz und verständlich, im Gegensatz zur der "elendiglich" langen Batchlösung (sorry Biber )

Ich denke ich muss mir doch 'mal die Parameter von OpenTextFile genauer anschauen.

mfg
Axel
Bitte warten ..
Mitglied: bastla
19.11.2007 um 12:40 Uhr
@ahe
In Unicode schreiben ist ja eigentlich hier nicht notwendig
Vermutlich nicht - ich hab's vor allem zu Demozwecken verwendet, und weil ich dann mit "fc /b" Original- und bearbeitete Datei leicht vergleichen konnte.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
19.11.2007 um 12:50 Uhr
@bastla, @ahe

Schön, dass wir alle darüber gesprochen haben, aber dennoch:

@tomost aka ThreadOwner
Liest Du noch mit und möchtest Du auch mal zu Wort kommen?
Ist die Frage für Dich beantwortet oder eher zerredet?


Bitte um Feedback
Biber
Bitte warten ..
Mitglied: tomost
20.11.2007 um 09:51 Uhr
Hallo zusammen,
sorry leute, ich war bis inkl. gestern krank.
Sobald ich meine Mails durch hab werde ich mir mal alles anschauen und meinen "Senf" dazugeben.

Danke schonmal.

tomost
Bitte warten ..
Mitglied: tomost
20.11.2007 um 10:59 Uhr
Hallo Leute,
ich bin begeistert.
Mit dem script
'SetShowIconInNativeRegFile.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
sNewRegText = Replace(fso.OpenTextFile(WScript.Arguments(0), 1, , True).ReadAll, _
"""ShowIcon""=dword:00000000", """ShowIcon""=dword:00000001")
fso.OpenTextFile(WScript.Arguments(1), 2, True, True).Write sNewRegText

funktionierts perfekt.

Herzlichen Dank an alle.
Grüße
tomost
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell - Registrywert setzen
gelöst Frage von DaniBatch & Shell2 Kommentare

Guten Abend zusammen, ich versuche in der Windowsregistry einen Key wie diesen anzulegen: Dazu habe ich folgenden Code entworfen: ...

Batch & Shell

Registrywert suchen und Oberschlüssel löschen

gelöst Frage von busteronBatch & Shell7 Kommentare

Hallo werte Gemeinschaft, leider bin ich nirgends im Internet fündig geworden um eine Lösung zu bekommen. Ich hab folgendes ...

Batch & Shell

Windows Batch - Drag and Drop - prüfen ob Parameter leer

gelöst Frage von zimbosmurfBatch & Shell2 Kommentare

Hallo! Ich habe ein Batch-Skript für eine Backuproutine entworfen, das aufgerufen werden soll, indem man einen Ordner auf das ...

Entwicklung

Powershell progressbar AND multitask

Frage von today12Entwicklung4 Kommentare

Hallo Leute, ich bin mal wieder auf eure Hilfe angewiesen, da mir die verschiedensten SuFu keine geeigneten Ergebnisse liefern ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 3 TagenHumor (lol)6 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 4 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 7 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 7 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore30 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Windows Server
Kleine Umfrage: Windows Server Desktop oder Core?
Frage von doomfreakWindows Server18 Kommentare

Hey :) Ich wollte mal eine kleine Umfrage hier starten. Ich bin schon etwas länger auf dieser Seite hier ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript17 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...