Jump to content

Registry exportieren über Script bzw Batch


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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?

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...