Jump to content
Sign in to follow this  
Netranger

Registry exportieren über Script bzw Batch

Recommended Posts

Hallo.

 

Und zwar hab ich eine kleine Frage.

Hier im Betrieb wird demnächst eine Umstellung der Profile stattfinden.

Und zwar ändert sich die Domäne, und auch die Benutzernamen werden sich ändern.

 

Wenn man sich dann ja nun unter dem neuen Profil anmeldet, ist es ja klar, daß das dann im Rohzustand ist und alle benutzerspezifischen Daten verloren sind.

 

Die Möglichkeit, daß man die Benutzerprofile in Windows kopieren kann ist mir bekannt, aber damit ist der Zeitaufwand viel zu groß.

 

Deswegen habe ich mir gedacht, einfach den Registryschlüssel HKey_Current_User im alten Profil zu exportieren und im neuen dann wieder zu importieren.

Da die User an ihren Rechnern jeweils über Administratorrechte verfügen, stellt das ja kein Problem dar.

 

Getestet habe ich das nun schon manuell und es funktioniert fast alles einwandfrei. Nur ein paar Teilschlüssel kann er nicht importieren, aber sie werden sowieso nicht benötigt, da diese von Windows selbst wieder erstellt werden, wenn sie fehlen.

 

 

Nun geht es daran, dies möglichst "***ensicher" zu verpacken.

Dazu dachte ich mir, eine Batch bzw ein Script zu schreiben, das erst den Schlüssel HKCU exportiert in eine *.reg-datei.

Dann muß sich der ser unter seinem neuen Profil anmelden und ruft ein 2. Script auf, das dann die reg-Datei wieder importiert, unter dem jetztgen HKCU, der ja jetzt die Daten des neuen Profils enthält.

 

Ich habe das als erstes versucht mit dem Befehl reg.exe zu realisieren.

Aber hier habe ich das Problem, daß die Registry nicht richtig exportiert wird. In der erstellten Datei sind dann nur noch wilde Zeichen, aber kein Text mehr wie man es von den selbst erstellten reg-Dateinen über Regedit kennt.

 

 

Deswegen meine Frage:

Wie exportiere ich den Teilschlüssel HKey_Current_User in eine Reg-Datei?

Share this post


Link to post

hm, jetzt weiss ich welche möglichkeit nach hilfe ich vergessen hab :rolleyes:

 

man sollte sich schon die parameter von regedit anschaun :)

 

 

danke dann nochmal dafür und damit kann der thread hier auch schon wieder geschlossen werden.

Share this post


Link to post

also mit regedit /? bekommt ma ja irgendwie nicht die möglichen parameter angezeigt :(

 

deswegen hab ich noch ne frage:

 

und zwar will ich jetzt mit der batch noch einen registryschlüssel (enthält nur werte für HKLM) auch noch remote auf einen anderen rechner in runonce übertragen.

 

wie mach ich das?

Share this post


Link to post

Regedit geht da glaub ich nicht.

 

Benutze REG.EXE von MS und dann

 

REG ADD \\rs01\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v "eintarg" /d "wert"

Share this post


Link to post

hab ich auch schon nen weng rumprobiert, aber da kommt immer das:

 

C:\>REG ADD \\pdm-pool-test2\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v "Hotfix" /d "C:\Hotfix.exe -u -z -q -f"

 

To many command-line parameters.

 

 

ein wenig anderst, aber eigentlich fast das gleiche:

 

C:\>reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce\Hotfix=Hotfix.exe -u -z -q -f" \\pdm-pool-test2

Error: The operation could not be completed.

 

 

und noch ein versuch, der fehlschlägt:

 

C:\>reg backup HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce c:\hotfix

Der Vorgang wurde erfolgreich beendet.

 

C:\>reg restore c:\hotfix HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce \\pdm-pool-test2

Error: The operation could not be completed.

 

 

 

dazu will ich noch sagen, daß der andere rechner ein rechner mit winNT ist.

 

jedoch kann ich mich über den registrierungseditor über registrierung -> mit netzwerkregistrierung verbinden wunderbar zu der registry vom remoterechner verbinden.

Share this post


Link to post

Bei mir geht deine erste Zeile wunderbar.

 

Welch Version von reg.exe setz du ein. Bei mir

Registry Console Tool For Windows 2000 - version 2.0

Copyright © Microsoft Corp. 1981-1999. All rights reserved

Share this post


Link to post

thawild, danke für den link, aber des bringt mir net viel weil ich des alles in ner bat-datei ausführen will.

 

 

Command-line registry manipulation utility version 1.04.

Copyright Microsoft Corporation 1997. All rights reserved.

 

 

hups, en weng älter :)

 

aber hab ich ausm resource kit für win 2000

Share this post


Link to post

so, außer den paar kleine kinderkrankheiten, die noch da sind, funtioniert des jetzt so weit so gut.

 

jetzt wär noch ein problem, nach dessen lösung ich in die luft springen könnte.

 

 

und zwar würd ich gerne der batch-datei eine liste von ip-adressen übergeben, die dann nacheinander abgearbeitet werden.

 

kann man mit ner batchdatei ne text-file zeilenweise auslesen lassen und immer eine ip nach der anderen einlesen?

und wenn ja wie?

 

über ein java-programm könnte ich es realisieren, aber das ist erstens nochmal zusätzliche arbeit und zweitens ein problem, wenn auf dem rechner dann kein java interpreter installiert sind.

Share this post


Link to post

In einer Zeile

 

FOR /F "eol=; tokens=1 delims=, " %%i in (Datei.txt) do REG ADD \\%%i\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v "Hotfix" /d "C:\Hotfix.exe -u -z -q -f"

Share this post


Link to post

Hi Netranger,

 

entweder mit FOR von der Commandline ( resp. Batch ); mit dem Nachteil, dass alles in einer Zeile stehen muss !

Oder, so mach ich´s für alle möglichen automatisierten Doings, mit VBS :

 

Als Beispiel soll ein Script dienen, mit dem ich mal alle in einem Texfile definfierten ( Namen stehen einfach untereinander ) Hostnamen ( Computerkonten ) aus der Dömäne löschte.

 

'########################################################################################################

 

on error resume next

 

Dim strComp

Dim strDomain

 

Dim objDomain

Dim objArgs

 

 

'Angabe der Domäne, aus der die Computerkonten gelöscht werden sollen

 

strDomain = "<DomainName>"

 

'##################--Wirklich Ausführen ????--############################################################

 

msg = "Kurzbeschreibung:" & vbCr & vbCr &"Dieses Skript löscht alle, im Textfile angegebenen Computerkonten in der Domäne " & strDomain & ". " & vbCr & vbCr & "Das Skript jetzt ausführen?"

antwort = MsgBox(msg, vbYesNo + vbQuestion)

if antwort = vbNo then

MsgBox "Abbruch", vbExclamation

WScript.Quit

end if

 

'########################--INPUT--Textfile wird ausgelesen--#############################################

 

Set objArgs = WScript.Arguments

 

If objArgs.Count > 0 Then

 

file = objArgs(0)

Else

 

file = InputBox("Welche Datei soll ausgelesen werden ?" ,"Datei angeben")

 

End If

 

Set WshShell = CreateObject ("WScript.Shell")

Set fso = CreateObject("Scripting.FileSystemObject")

 

If fso.FileExists(file) Then

 

Set txtStream = fso.OpenTextFile(file)

 

Do While Not (txtStream.atEndOfStream)

 

txt = txtStream.Readline

 

details = Split(txt, ";")

 

strComp = Trim (details(0))

 

 

'#######--LOOP--Für alle, im File angebenen Computer wird folgendes ausgeführt--#######################

 

'Löschen des Computerkontos

 

Set objDomain = GetObject("WinNT://" & strDomain)

Set objNTComp = GetObject("WinNT://" & strDomain & "/" & strComp & "$")

 

Call objDomain.Delete("Computer", strComp)

 

 

'#########################################

 

 

Loop

 

Else 'Datei nicht vorhanden

 

MsgBox "Die Datei" & " " & file & " " & "konnte nicht gefunden werden !", vbExclamation, "Abbruch"

 

 

End If

 

MsgBox "Script beendet"

 

 

Gruß

THUMB

Share this post


Link to post

also, ich habs jetzt mit FOR gelöst. Läuft ohne Probleme.

 

@Thumb: Was du erwähnt hast mit alles in einer Zeile habe ich durch eine 2. Batch-Datei und Goto-Anweisungen übergangen. (Ja, ich weiss, daß Programmieren mit Goto unsauber und veraltet ist. :rolleyes: Habs aber trotzdem gemacht, weil es in meinem Fall des schlauste war und Batch-Dateien leider keine andere Möglichkeiten bieten)

 

 

Jetzt hab ich nur noch eine kleine unfeine Sicherheitslücke in meinen Batches.

 

Folgender Aufbau:

 

Die erste Batchdatei wird aufgerufen. Ihr werden einige Parameter übergeben, darunter auch ein Username mit Adminrechten in der ganzen Domäne und das zugehörige Passwort.

In der ersten Batchdatei wird wiederum eine Batch-Datei aufgerufen, der die Login-Daten weitergegeben werden.

 

 

Das Problem dabei ist nun, daß das Passwort im Klartext auf der Bildschirmausgabe erscheint.

Beim ersten Schritt, wo der Benutzer sein Passwort eingibt wird es wohl nicht möglich sein, es zu verstecken.

Aber bei dem Aufruf der 2. Batch wird die Befehlszeile mit dem Aufruf dargestellt, und hier wird dann auch das Passwort erneut angezeigt.

 

Da mit diesem Script eine Liste von ungefähr 500 IP-Adressen abgearbeitet wird, erscheint damit das Passwort 500 mal auf dem Bildschirm, was eine erhebliche Sicherheitslücke darstellt.

 

Deswegen wollte ich fragen, wie ich die Ausgabe der Befehlszeile mit dem Aufruf der 2. Batch unterdrücken kann.

 

 

Hier mal meine 2 Batch-Dateien:

 

HotfixNT4.bat

(Parameter: patchdatei, ip-datei, username, userpasswort)

 

@echo off
echo.
echo.
echo.**********
echo.%DATE% %TIME% :  Ausbringung von %1%.
echo.
echo.						>>patch.log
echo.						>>patch.log
echo.********************			>>patch.log
echo.%DATE% %TIME% :  Ausbringung von %1%.	>>patch.log
echo.						>>patch.log
FOR /F "eol=; tokens=1 delims=, " %%i in (%2) do hotfixnt4_2.bat %1 %%i %3 %4

 

 

HotfixNT4_2.bat

(Parameter: patchdatei, ip-adresse, username, userpasswort)

 

@echo off

echo.
echo.Baue Verbindung zu %2 auf ...

net use k: \\%2\C$ %4 /user:%3 >>log.txt
IF /I %ERRORLEVEL% NEQ 0 (goto connectfehlschlag)

echo.   %DATE% %TIME% :  Verbunden mit %2.
echo.   %DATE% %TIME% :  Verbunden mit %2. >>patch.log
xcopy %1 k:\Temp\ /y >>log.txt
IF /I %ERRORLEVEL% NEQ 0 (goto copyfehlschlag)

REG ADD \\%2\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v "%1" /d "C:\%1 -u -z -q -f" /f >>log.txt
IF %ERRORLEVEL% == 0 (goto erfolg) ELSE (goto registryfehlschlag)
goto ende


:connectfehlschlag:
echo.   %DATE% %TIME% :   FEHLER: Konnte mich auf %1 nicht connecten.
echo.
echo.   %DATE% %TIME% :   FEHLER: Konnte mich auf %1 nicht connecten. >>patch.log
echo. >>patch.log
goto ende


:copyfehlschlag:
echo.   %DATE% %TIME% :   FEHLER: Konnte die Datei nicht auf %1 kopieren.
echo.
echo.   %DATE% %TIME% :   FEHLER: Konnte die Datei nicht auf %1 kopieren. >>patch.log
echo. >>patch.log
goto netdelete


:registryfehlschlag
echo.   %DATE% %TIME% :   FEHLER: Registry auf %1 nicht ge„ndert.
echo.
echo.   %DATE% %TIME% :   FEHLER: Registry auf %1 nicht geändert. >>patch.log
echo. >>patch.log
goto netdelete


:erfolg
echo.   %DATE% %TIME% :   Patch auf %1 ausgebracht.
echo.
echo.   %DATE% %TIME% :   Patch auf %1 ausgebracht. >>patch.log
echo. >>patch.log
goto netdelete


:netdelete
net use /delete k:	>>log.txt


:ende

Share this post


Link to post

Hallo Netranger,

teste mal wie anbei. Hab es leider nicht ausprobiert.

 

FOR /F "eol=; tokens=1 delims=, " %%i in (%2) do hotfixnt4_2.bat %1 %%i %3 %4 >NUL:

Share this post


Link to post

negativ, bringt nix, er schreibt mir die zeile immernoch hin.

 

zudem wird mir dann damit die ganze ausgabe, die die 2. batchdatei macht unterdrückt, aber ich will ja auf dem bildschirm meine selbst geschriebenen nachrichten sehen

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...