Hallo,
ich habe mich schon eine Weile mit dem Thema XP UNATTEDED installation beschäftigt. Leider gibt es da immer das Problem das man jede Menge REG Keys gesammelt hat und damit sein Profil so bearbeitet hat bis alles so aussah wie man es gerne haben wollte.
Das Problem ist aber, wenn man einen Neuen Benutzer anlegt, und dieser sich zum ersten mal anmeldet, sind die ganzen Einstellungen die normalerweise in der Registry unter HKCU stehen für den neuen Benutzer wieder auf den Standartwerten
Während ein vohergehende Script über den Weg gegangen ist den RegistryZweig des Defalt Users zu laden und dann die entsprechenden Regfiles hierfür anzupassen und einzulesen, habe ich jetzt doch einen Weg gefunden die NTUSER.DAT des aktuellen Benutzers zu kopieren. (d.h. nicht ich sondern Thorsten Eggeling, Email: prx@pcwelt.de)
Ich benutze das freie Programm "pcwRegBack" von der PCWelt Seite(google hilft weiter). Dieses Programm kann eine Sicherung der Registry im laufendem Betrieb anlegen und extrahiert hierbei u.a die NTUSER.DAT in eine Backupverzeichnis.
Das ganze habe ich in ein AUTOIT Script verpackt so daß das ganze auch im Rahmen einer UNATTENDED installation funktioniert. (z.B c:\>"ProfilCopy.exe /HKCU")
Herrausgekommen ist nun mein Tool Profilcopy.
Profilcopy kann man z.B. auch benutzen um nach(!) eine kompletten XP installation das "Defaul User" Profil ohne den Umweg über ein drittes Benutzerkonto zu kopieren.
Wie funktioniert das jetzt:
Starten kann man Profilcopy von der Komandzeile mit Parameter für die UNATTENDED Methode. Startet man ohne Parameter wird vorher eine GUI aufgerufen. Startet man mit der Option /? wird ein Syntay-Hilfe-Fenster für die Kommandozeile ausgegeben.
Für beide Varianten kann man neben dem kopieren der NTUSER.DAT noch das kopieren folgender Ordner aktivieren: (in Klammern die Switches für die Komandozeile)
-Autostart (/a)
-Schnellstartleiste (/s)
-Favoriten (/f)
-Desktop (/d)
-NTUSER.DAT (/HKCU)
Die GUI Variante hat eine Funktion mehr: Man kann den Profilordner in den kopiert werden soll vorher auswählen.
Das ist nützlich wenn man die Änderungen auch für schon bestehende Profile "im Nachhinein" machen will. Hier sollte man aber vorsichtig rangehen, da in der NTUSER.DAT im Normalfall auch wichtige Einstellungen für bestimmte Programme hinterlegt werden. Diese sind dann "weg". Allerdings wird beim kopieren der NTUSER.DAT vorher noch eine Sicherheitskopie der ursprünglichen Datei angelegt.
Meine Tests hiermit bisher waren erfolgreich.
Ihr könnte das Tool ja mal ausprobiern und ggf. Berichten wie es bei euch funktioniert.
#include <process.au3>
#include <Array.au3>
Opt("TrayIconDebug", 1); zeigt am trayicon welchen Befehl das Script gerade Ausführt
dim $profileLabel, $Checkbox1, $20, $21=0, $22=0, $23=0, $24=0, $25=0, $Checkbox1, $Checkbox2, $Checkbox3, $Checkbox4, $Checkbox5, $Checkbox6, $Form1
dim $profileLabel,$profilauto, $profilquick, $profilfavoriten, $profildesktop, $profilHKCU, $var1, $copylevel
;~ dim $CMDLINE[6]
$profilname = @HomeDrive & "\Dokumente und Einstellungen" & "Default User"; Voreinstellung
FileInstall("C:\pcwRegBackup.exe",@TempDir & "" , 1)
$mon = StringLeft(@MON,1);~ MsgBox(0,"erste Stelle des Monats",$mon)
If $mon = 0 then $mon2 = StringRight(@MON,1);entfernt führende Nullen im Monat für die Abfrage des Verzeichnises
$searchstring = $mon2 & "_" & @MDAY & "_" & @YEAR & "_" & @HOUR & "_" & @MIN & "*.*"
$befehl ='Title NTUSER.DAT wird extrahiert - Achtung kurzzeitige hohe CPU Last && ' & @TempDir & "\pcwRegBackup.exe /b"
; Programmstart
If Not $CMDLINE[0] Then; kein Komandozeilenparameter übergeben -> GUI Starten
menue()
Else; Komandozeilenparameter auswerten
;~ _ArrayDisplay($CMDLINE,"")
$array_anzahl=$CMDLINE[0]
If $array_anzahl = 1 Then
If $CMDLINE[1] = "/a" Then $21 = 1
If $CMDLINE[1] = "/s" Then $22 = 1
If $CMDLINE[1] = "/f" Then $23 = 1
If $CMDLINE[1] = "/d" Then $24 = 1
If $CMDLINE[1] = "/HKCU" Then $25 = 1
If $21=0 And $22=0 And $23=0 And $24=0 And $25=0 Then
MsgBox(4096,"Fehler"," keine passende Argumente übergeben" & @cr & "Mögliche Optionen:" & @CR & "/a ->Autostart Ordner kopieren" & @CR & "/s ->Schnellstartleiste kopieren" & @CR & "/f ->Favoriten kopieren" & @CR & "/d -> Desktop kopieren" & @CR & "/HKCU ->NTUSER.DAT des aktuellen Benutzers in das Default User Profil kopieren")
EndIf
EndIf
If $array_anzahl = 2 Then
If $CMDLINE[1] = "/a" Or $CMDLINE[2] = "/a" Then $21 = 1
If $CMDLINE[1] = "/s" Or $CMDLINE[2] = "/s" Then $22 = 1
If $CMDLINE[1] = "/f" Or $CMDLINE[2] = "/f" Then $23 = 1
If $CMDLINE[1] = "/d" Or $CMDLINE[2] = "/d" Then $24 = 1
If $CMDLINE[1] = "/HKCU" Or $CMDLINE[2] = "/HKCU" Then $25 = 1
If $21=0 And $22=0 And $23=0 And $24=0 And $25=0 Then
MsgBox(4096,"Fehler"," keine passende Argumente übergeben" & @cr & "Mögliche Optionen:" & @CR & "/a ->Autostart Ordner kopieren" & @CR & "/s ->Schnellstartleiste kopieren" & @CR & "/f ->Favoriten kopieren" & @CR & "/d -> Desktop kopieren" & @CR & "/HKCU ->NTUSER.DAT des aktuellen Benutzers in das Default User Profil kopieren")
EndIf
EndIf
If $array_anzahl = 3 Then
If $CMDLINE[1] = "/a" Or $CMDLINE[2] = "/a" or $CMDLINE[3] = "/a" Then $21 = 1
If $CMDLINE[1] = "/s" Or $CMDLINE[2] = "/s" or $CMDLINE[3] = "/s" Then $22 = 1
If $CMDLINE[1] = "/f" Or $CMDLINE[2] = "/f" or $CMDLINE[3] = "/f" Then $23 = 1
If $CMDLINE[1] = "/d" Or $CMDLINE[2] = "/d" or $CMDLINE[3] = "/d" Then $24 = 1
If $CMDLINE[1] = "/HKCU" Or $CMDLINE[2] = "/HKCU" or $CMDLINE[3] = "/HKCU" Then $25 = 1
If $21=0 And $22=0 And $23=0 And $24=0 And $25=0 Then
MsgBox(4096,"Fehler"," keine passende Argumente übergeben" & @cr & "Mögliche Optionen:" & @CR & "/a ->Autostart Ordner kopieren" & @CR & "/s ->Schnellstartleiste kopieren" & @CR & "/f ->Favoriten kopieren" & @CR & "/d -> Desktop kopieren" & @CR & "/HKCU ->NTUSER.DAT des aktuellen Benutzers in das Default User Profil kopieren")
EndIf
EndIf
If $array_anzahl = 4 Then
If $CMDLINE[1] = "/a" Or $CMDLINE[2] = "/a" or $CMDLINE[3] = "/a" Or $CMDLINE[4] = "/a" Then $21 = 1
If $CMDLINE[1] = "/s" Or $CMDLINE[2] = "/s" or $CMDLINE[3] = "/s" Or $CMDLINE[4] = "/s" Then $22 = 1
If $CMDLINE[1] = "/f" Or $CMDLINE[2] = "/f" or $CMDLINE[3] = "/f" Or $CMDLINE[4] = "/f" Then $23 = 1
If $CMDLINE[1] = "/d" Or $CMDLINE[2] = "/d" or $CMDLINE[3] = "/d" Or $CMDLINE[4] = "/d" Then $24 = 1
If $CMDLINE[1] = "/HKCU" Or $CMDLINE[2] = "/HKCU" or $CMDLINE[3] = "/HKCU" Or $CMDLINE[4] = "/HKCU" Then $25 = 1
If $21=0 And $22=0 And $23=0 And $24=0 And $25=0 Then
MsgBox(4096,"Fehler"," keine passende Argumente übergeben" & @cr & "Mögliche Optionen:" & @CR & "/a ->Autostart Ordner kopieren" & @CR & "/s ->Schnellstartleiste kopieren" & @CR & "/f ->Favoriten kopieren" & @CR & "/d -> Desktop kopieren" & @CR & "/HKCU ->NTUSER.DAT des aktuellen Benutzers in das Default User Profil kopieren")
EndIf
EndIf
If $array_anzahl = 5 Then
If $CMDLINE[1] = "/a" Or $CMDLINE[2] = "/a" or $CMDLINE[3] = "/a" Or $CMDLINE[4] = "/a" or $CMDLINE[5] = "/a" Then $21 = 1
If $CMDLINE[1] = "/s" Or $CMDLINE[2] = "/s" or $CMDLINE[3] = "/s" Or $CMDLINE[4] = "/s" or $CMDLINE[5] = "/s" Then $22 = 1
If $CMDLINE[1] = "/f" Or $CMDLINE[2] = "/f" or $CMDLINE[3] = "/f" Or $CMDLINE[4] = "/f" or $CMDLINE[5] = "/f" Then $23 = 1
If $CMDLINE[1] = "/d" Or $CMDLINE[2] = "/d" or $CMDLINE[3] = "/d" Or $CMDLINE[4] = "/d" or $CMDLINE[5] = "/d" Then $24 = 1
If $CMDLINE[1] = "/HKCU" Or $CMDLINE[2] = "/HKCU" or $CMDLINE[3] = "/HKCU" Or $CMDLINE[4] = "/HKCU" or $CMDLINE[5] = "/HKCU" Then $25 = 1
If $21=0 And $22=0 And $23=0 And $24=0 And $25=0 Then
MsgBox(4096,"Fehler"," keine passende Argumente übergeben" & @cr & "Mögliche Optionen:" & @CR & "/a ->Autostart Ordner kopieren" & @CR & "/s ->Schnellstartleiste kopieren" & @CR & "/f ->Favoriten kopieren" & @CR & "/d -> Desktop kopieren" & @CR & "/HKCU ->NTUSER.DAT des aktuellen Benutzers in das Default User Profil kopieren")
EndIf
EndIf
If $array_anzahl = 6 Then
If $CMDLINE[1] = "/a" Or $CMDLINE[2] = "/a" or $CMDLINE[3] = "/a" Or $CMDLINE[4] = "/a" or $CMDLINE[5] = "/a" or $CMDLINE[6] = "/a" Then $21 = 1
If $CMDLINE[1] = "/s" Or $CMDLINE[2] = "/s" or $CMDLINE[3] = "/s" Or $CMDLINE[4] = "/s" or $CMDLINE[5] = "/s" or $CMDLINE[6] = "/s" Then $22 = 1
If $CMDLINE[1] = "/f" Or $CMDLINE[2] = "/f" or $CMDLINE[3] = "/f" Or $CMDLINE[4] = "/f" or $CMDLINE[5] = "/f" or $CMDLINE[6] = "/f" Then $23 = 1
If $CMDLINE[1] = "/d" Or $CMDLINE[2] = "/d" or $CMDLINE[3] = "/d" Or $CMDLINE[4] = "/d" or $CMDLINE[5] = "/d" or $CMDLINE[6] = "/d" Then $24 = 1
If $CMDLINE[1] = "/HKCU" Or $CMDLINE[2] = "/HKCU" or $CMDLINE[3] = "/HKCU" Or $CMDLINE[4] = "/HKCU" or $CMDLINE[5] = "/HKCU" or $CMDLINE[6] = "/HKCU" Then $25 = 1
If $21=0 And $22=0 And $23=0 And $24=0 And $25=0 Then
MsgBox(4096,"Fehler"," keine passende Argumente übergeben" & @cr & "Mögliche Optionen:" & @CR & "/a ->Autostart Ordner kopieren" & @CR & "/s ->Schnellstartleiste kopieren" & @CR & "/f ->Favoriten kopieren" & @CR & "/d -> Desktop kopieren" & @CR & "/HKCU ->NTUSER.DAT des aktuellen Benutzers in das Default User Profil kopieren")
EndIf
EndIf
;~ MsgBox(0,"",$21 & "-" & $22 & "-" & $23 & "-" & $24 & "-" & $25)
kopiere_ProfilOrdner()
EndIf
Func MENUE()
#include <GUIConstants.au3>
; == GUI generated with Koda ==);
$Form1 = GUICreate("XP ProfilCopy", 800, 237, 192, 125)
$Button3 = GUICtrlCreateButton("wählen", 100, 24, 49, 17, 0)
$Checkbox1 = GUICtrlCreateLabel("Profilordner ", 24, 24, 70, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Autostart kopieren", 24, 48, 153, 17)
$Checkbox3 = GUICtrlCreateCheckbox("Schnellstartleiste kopieren", 24, 72, 153, 17)
$Checkbox4 = GUICtrlCreateCheckbox("Favoriten kopieren", 24, 96, 153, 17)
$Checkbox5 = GUICtrlCreateCheckbox("Desktop kopieren", 24, 120, 153, 17)
$Checkbox6 = GUICtrlCreateCheckbox("NTUSER.DAT (HKCU) kopieren", 24, 148, 173, 17)
$Button1 = GUICtrlCreateButton("OK", 24, 200, 73, 25, 0)
$Button2 = GUICtrlCreateButton("Abbruch", 112, 200, 73, 25, 0)
$profileLabel = GUICtrlCreateLabel($profilname, 248, 24, 400, 17)
$profilauto = GUICtrlCreateLabel($profilname & "\Startmenü\Programme\Autostart", 248, 48, 400, 17)
$profilquick = GUICtrlCreateLabel($profilname & "\Anwendungsdaten\Microsoft\Internet Explorer\Quick Launch", 248, 72, 600, 17)
$profilfavoriten = GUICtrlCreateLabel($profilname & "\Favoriten",248, 96, 400, 17)
$profildesktop = GUICtrlCreateLabel($profilname & "\Desktop",248, 120, 400, 17)
$profilHKCU = GUICtrlCreateLabel($profilname ,248, 148, 400, 17)
GUISetState(@SW_SHOW)
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button3
profilordnerwaehlen()
Case $msg = $Button1
OK()
Case $msg = $Button2;Abbruch
Exit
Case Else
;;;;;;;
EndSelect
WEnd
EndFunc
Func profilordnerwaehlen()
$var1 = $profilname
;~ FileSelectFolder ( "dialog text", "root dir" [, flag [, "initial dir"]] )
$profilname = FileSelectFolder("Bitte wählen sie den Profilordner",@HomeDrive & "\Dokumente und Einstellungen",1)
GUICtrlSetData($profileLabel,$profilname)
GUICtrlSetData($profilauto,$profilname & "\Startmenü\Programme\Autostart")
GUICtrlSetData($profilquick,$profilname & "\Anwendungsdaten\Microsoft\Internet Explorer\Quick Launch")
GUICtrlSetData($profilfavoriten, $profilname & "\Favoriten")
GUICtrlSetData($profildesktop, $profilname & "\Desktop")
GUICtrlSetData($profilHKCU,$profilname)
ControlCommand("","",$Checkbox1,"Check", "")
;~ MsgBox(0,"",$var1 & @cr & $profilname)
EndFunc
Func OK()
;~ $20 = GUICtrlRead($Checkbox1);Profil kopieren
$21 = GUICtrlRead($Checkbox2);Autostart kopieren
$22 = GUICtrlRead($Checkbox3);Schnellstartleiste kopieren
$23 = GUICtrlRead($Checkbox4);Favoriten kopieren
$24 = GUICtrlRead($Checkbox5);Desktop kopieren
$25 = GUICtrlRead($Checkbox6);NTUSER.DAT (HKCU) kopieren
GUIDelete($Form1)
kopiere_ProfilOrdner()
EndFunc
Func kopiere_ProfilOrdner()
;~ MsgBox(0,"",$21 & "-" & $22 & "-" & $23 & "-" & $24 & "-" & $25 & @cr & $profilname)
If $21 = 1 Then DirCopy(@StartupDir, $profilname & "\Startmenü\Programme\Autostart", 1)
If $22 = 1 Then DirCopy(@AppDataDir & "\Microsoft\Internet Explorer\Quick Launch", $profilname & "\Anwendungsdaten\Microsoft\Internet Explorer\Quick Launch", 1)
If $23 = 1 Then DirCopy(@FavoritesDir, $profilname & "\Favoriten", 1)
If $24 = 1 Then DirCopy(@DesktopDir, $profilname & "\Desktop", 1)
If $25 = 1 Then copy_NTUSER_DAT()
EndFunc
Func copy_NTUSER_DAT()
SplashTextOn("NTUSER DAT von [" & @UserName & "] wird kopiert","Die NTUSER.DAT des aktuellen Benutzers wird nun kopiert" & @CR & "Dies entspricht dem Registry-Zweig ->HKCU" & @CR & "Die dort hinterlegten Einstellungen gelten dann für jedes neuangelegte Profil" & @CR & @CR & "Bitte etwas Geduld...",560, 150, @DesktopWidth/2-280, 20)
$isfile = FileExists(@TempDir & "\pcwRegBackup.exe")
if $isfile = 0 Then MsgBox(0, "Error", "[pcwRegBackup.exe] nicht in " & @TempDir & " gefunden:")
RunWait(@ComSpec & " /c " & $befehl, "", @SW_HIDE)
FileDelete(@TempDir & "\pcwRegBackup.exe")
SplashOff()
$search = FileFindFirstFile(@TempDir & "" & $searchstring)
If $search = -1 Then
MsgBox(0, "Error", "Backupverzeichnis der Registry nicht gefunden:" & @TempDir & "" & $searchstring )
Exit
EndIf
$dir = FileFindNextFile($search)
;~ MsgBox(0,"gefundenes Verzeichnis",$dir,2)
$msg = MsgBox(1,"kopieren der extrahierten NTUSER.DAT","NTUSER.DAT von [" & @UserName & "] wird jetzt in das Profil von [" & $profilname & "] kopiert", 2)
If $msg = 2 Then Exit
FileCopy($profilname & "" & "NTUSER.DAT", $profilname & "" & "NTUSER.DAT" & "." & @MON & "_" & @MDAY & "_" & @YEAR & "_" & @HOUR & "_" & @MIN & "_" & @SEC , 1)
$copylevel = FileCopy(@TempDir & "" & $dir & "" & "NTUSER.DAT",$profilname, 1)
If $copylevel = 0 Then
MsgBox(4096,"FEHLER", "Es ist ein Fehler beim kopieren aufgetreten. - Bitte überprüfen sie das Zielverzeichnis")
Run("explorer " & $profilname)
exit
EndFunc
Alles anzeigen