Wir migrieren von einer normalen Arbeitsgruppe / Workgroup, also einem lockeren Rechnerverbund ohne zentrale(n) Server, zu einem System mit Active Directory Domäne. Wir wollen uns dabei in diesem Artikel vor allem mit der Benutzerprofilproblematik befassen.
Nachdem ein Computer, der aus einer Arbeitsgruppe stammt, in eine Domäne aufgenommen wird und sich die Benutzer dann mit einem Domänen-Benutzer anmelden, bekommen diese natürlich ein neues lokales Domänenprofil. Gerade in heterogenen Umgebungen in denen gar mehrere Generation von Client Betriebssystemen laufen, also Windows XP und Windows 7 zum Beispiel wird das vorgehen noch komplexer.
Man könnte den Mitarbeitern zwar sagen das sie sich Ihre Einstellungen, Verknüpfungen usw. neu platzieren müssen – es verschwinden dabei aber auch leider sämtliche Einstellungen aus lokalen Programmen. Das kann bei vielen Einstellungen (Office Einstellungen, E-Mail-Settings, Vorlagen- und Makroordner usw.) aber ewig dauern und nie ganz ohne Support von statten gehen.
In unserer Beispielumgebung finden wir folgendes vor:
- Einen neuen Windows Server 2008 R2
- Active Directory mit Domänenname “schule.local”
- Clients mit Windows XP + Windows 7 Pro
- Jeder Mitarbeiter des Büros arbeitet an einem festen Arbeitsplatz-PC
Man könnte jetzt natürlich sämtliche Profile manuell umkopieren, Berechtigungen anpassen, dann feststellen das doch irgendetwas hakt und verzweifeln – dass wollen wir natürlich vermeiden. Ebenso wollen wir unsere Arbeit am Kunden minimal halten und benutzen deshalb Tools und Skripts um uns die Arbeit zu erleichtern. Turnschuhadministration wollen wir ja vermeiden, ne?
Fangen wir mit den Windows XP Clients an:
Als Vorbereitung brauchen wir die “Windows Server 2003 Resource Kit Tools”. Wie jetzt? Keine Server 2003 CD zur Hand? Auch gut: Link
Man muss das Paket zwar installieren, wir brauchen allerdings nur das Tool “moveuser.exe” das wir uns dann aus C:\Programme\Windows Resource Kits\Tools (oder bei 64Bit Windows C:\Program Files (x86)\Windows Resource Kits\Tools) herauskopieren. Danach können wir das Paket wieder deinstallieren. Das Paket lässt sich auch auf einem Windows 7 PC (sogar in 64Bit) installieren. Starten würde ich dort dann allerdings nichts davon.
Wir haben also unsere moveuser.exe – jetzt würde ich empfehlen das wir noch ein kleines Script schreiben, dass uns die Syntax abnimmt, so dass wir nur noch den lokalen Benutzernamen und den neuen Domänenbenutzernamen eingeben müssen.
Mit einem beliebigen Editor erstellen wir uns also im gleichen Ordner in dem auch die Moveuser.exe liegt ein kleines Batchscript:
@echo off
set /P lokalerBenutzer=Der lokale Benutzername lautet:
set /P domBenutzer=Der Domaenenbenutzer lautet:
moveuser %lokalerBenutzer% %domBenutzer% /k
pause
Folglich ist die moveuser.exe Syntax recht einfach -> moveuser.exe Bjoern schule\Bjoern <- würde dafür sorgen das der lokale Benutzer “Bjoern” umkopiert wird für den Domänenbenutzer “Bjoern” der Domäne “Schule”. Ihr müsst dem Script also auch den Domänenbenutzer in der Syntax “domäne\benutzername” angeben! Heisst eure Domäne mit vollen Domänennamen (FQDN) z.B. schule1.bayern.de wäre euer Domänenname hier “schule1″ und mein Accountname wäre in diesem Falle dann “schule1\Bjoern”. Der “/k”-Parameter sorgt dafür das das Profil auch für den lokalen Benutzer erhalten bleibt, falls etwas schief geht.
Das Script zusammen mit der moveuser.exe auf einem Netzwerkshare oder USB-Stick würde dann so genutzt:
- Den Workstation PC der neuen Domäne hinzufügen
- Nach dem Reboot als beliebiger Domänen-Benutzer mit lokalen Adminrechten anmelden (Domänenadministrator würde hier auch gehen – ist aber nicht zu empfehlen!)
- Script starten, lokalen Benutzernamen eingeben, neuen Benutzernamen eingeben -> Abwarten – je nach Profilgröße kann das Moven einige Zeit in Anspruch nehmen
- Nach dem Umbewegen könnt ihr euch mit dem neuen Domänenbenutzer anmelden – es sollten alle Einstellungen übernommen worden sein
Wie war das noch mit der Turnschuhadministration? Genau! – Die wollen wir natürlich nicht.
Sobald die Client-PCs in der neuen Domäne sind, können wir unser Script erweitern bzw. einfach moveuser.exe mit einem weiteren Parameter füttern um uns die Laufarbeit zu ersparen:
@echo off
set /P lokalerBenutzer=Der lokale Benutzername lautet:
set /P domBenutzer=Der Domaenenbenutzer lautet:
set /P PC=Name des Client PC:
moveuser %lokalerBenutzer% %domBenutzer% /k /c:\\%PC%
pause
Wir haben eine weitere Variable nun an der Eingabeaufforderung: Den PC-Namen des Remote System an dem das lokale Profil in ein Domänenprofil umgewandelt werden soll.
Der entsprechende moveuser.exe Paramter ist: “/c:\\pcname” – wollen wir nun also mein lokales Profil auf dem PC “Buero1″ in mein neues Domänenprofil umkopieren, wäre die richtige komplette Syntax -> moveuser Bjoern schule\Bjoern /k /c:\\Buero1. Beachtet dabei, dass der Benutzer mit dem ihr am PC angemeldet seid, auf dem das Script startet auch auf dem PC auf dem das eigentliche Profil kopiert wird lokale Adminrechte braucht. Auch hier kann man das mit dem Domänenadministratoraccount machen.
Damit können wir nun schnell alle lokalen Profile der XP Rechner in Domänenprofile umwandeln.
Moveuser.exe wurde allerdings nach Windows XP nicht mehr weiter entwickelt. Stattdessen hat Microsoft eine WMI-Funktion “Win32_UserProfile” implementiert mit der sich der Vorgang nachbilden lässt. Am schnellsten und einfachsten kann per Visual Basic Script (VBS) auf die WMI-Schnittstelle zugegriffen werden.
Das original Script dafür stammt aus dem Microsoft Technet. Ich habe mir erlaubt es hier zu spiegeln: Download (rechter Mausklick -> Ziel speichern unter!)
Wichtig: Als erstes müsst ihr das Script mit einem beliebigen Editor (im Screenshot Notepad++) öffnen und in Zeile 27 diese Variable bearbeiten: strDomainDN=”dc=contoso,dc=com”
Dort muss eure Domäne im Distinguished Name Format stehen. Im “schule.local” Beispiel würde daraus also: strDomainDN=”dc=schule,dc=local” werden.
Im Beispiel “schule1.bayern.de” würde daraus dann: strDomainDN=”dc=schule1,dc=bayern,dc=de” werden.
Dem Script müssen natürlich auch wieder Variablen mit den Benutzernamen übergeben werden. Hierfür nehmen wir uns wieder unsere schöne Batch Datei her und bearbeiten sie ein wenig:
@echo off
set /P lokalerBenutzer=Der lokale Benutzername lautet:
set /P domBenutzer=Der Domaenenbenutzer lautet:
cd /d “%~dp0″
cscript MoveUser.vbs %lokalerBenutzer% %domBenutzer% /k
pause
Keine große Änderung, wie ihr seht. Wichtig ist das der Domänenbenutzer, trotz hardgecodetem Domänennamen mit vorhergehender Domäne eingegeben wird. Eben genauso, wie bei Moveuser.exe!
Auch das VB-Script kann natürlich die Profile auf einem anderen PC moven. Dafür nochmal das erweiterte Batch-Script, obwohl ihr sicherlich schon erraten könnt, wie die Veränderungen aussehen:
@echo off
set /P lokalerBenutzer=Der lokale Benutzername lautet:
set /P domBenutzer=Der Domaenenbenutzer lautet:
set /P PC=Name des Client PC:
cd /d “%~dp0″
cscript MoveUser.vbs %lokalerBenutzer% %domBenutzer% /k /c:\\%PC%
pause
Der einzige echte Unterschied zwischen dem Profilmove in Windows XP und Windows 7 entsteht dadurch das das Batchscript (oder die Eingabeaufforderung, falls ihr das VB-Script manuell starten wollt) mit Administratorrechten starten müsst:
Hier nochmal den Scriptablauf unter Windows 7:










Hallo Björn,
nach Deinem toll und verständlich geschriebenen Artikel habe ich gestern Stunden versucht, ein lokales Benutzerprofil in ein Domänenbenutzerprofil umzuwandeln. Wegen Windows 7 Pro (64 Bit) habe ich die Variante mit dem Visual Basic Script verwendet. Die Batchdatei habe ich auch erstellt, klappt auch soweit.
Angemeldet war ich als Domänen-Admin (lokaler Admin hat nicht funktioniert, da ich eine Fehlermeldung erhielt, dass keine Zugangsberechtigung zur Domain bestehen würde).
Trotzdem, obwohl ich als Domain-Admin angemeldet war, erhielt ich die Fehlermeldung, dass das Profil nicht bearbeitet werden konnte, da es geladen wäre. Das kann ich jedoch nicht nachvollziehen, weshalb das betroffene Benutzerprofil geladen sein soll. Ich habe sogar versucht, die Aktion im Abgesicherten Modus (Netzwerk) zu wiederholen, aber auch hier erhielt ich die Rückmeldung, das Benutzerprofil wäre geladen, es könnte nicht bearbeitet werden.
Hast Du vielleicht ein Idee, wie ich hier weiterkommen kann? Wie kann ich das Benutzerprofil “entladen”? Eine helfende Antwort von Dir wäre toll, da das Profil 360 GB groß ist, und ein Neuaufsetzen des Domain-Benutzerprofils sehr zeitraubend wäre…
Noch etwas: Darf das Domain-Benutzerprofil namentlich vorher schon bestehen, oder müsste dies aus der Domäne vorher gelöscht werden?
Das Profil soll nicht serverseitig gespeichert werden.
Danke für eine Antwort und Deine Hilfe.
Gruß
NI-Biker
Hallo NI-Biker,
manche Dienste oder Programme verhindern das die Registry sauber entladen wird. Das kann auch bei Windows 7 trotz integriertem UPHC Dienst noch passieren. Schau mal ins Syslog ob du ein Event 1530 findest. Mehr dazu: http://support.microsoft.com/kb/947238/en-us
Adobe Update Dienste sind bekannt dafür dieses Verhalten auszulösen (manchmal).
Das lokale Benutzerprofil des Domänenbenutzers sollte auf dem Rechner noch nicht existieren, bevor du es kopierst. Wenn du dich schonmal mit dem Benutzer angemeldet hattest kannst du den Profilordner aber vorher einfach entsorgen.
Gruß
Björn
Nochwas: Was zur Hölle ist in dem Profil denn 360GB groß?!
Je schlanker ein Profil umso besser die Chance das es erfolgreich konvertiert werden kann.
Hallo Björn,
herzlichen Dank für Deine fixe Antwort. Ich werde es nachher gleich mal checken.
Auf Deine Frage bezüglich der Profilgröße: Darin sind massenhaft Photoshop- und TIFF-Dateien enthalten, die verursachen die enorme Größe. Meinst Du, dass das MoveUser-Script in der Dimension der falsche Ansatz ist? Soll ich den Bilder-Ordner trotzdem vorher auslagern?
Danke für Deine großartige Hilfe!
Gruß
NI-Biker
Hallo NI-Biker,
ich würde die Dokumente tatsächlich mal auslagern vorher. Ich glaub zwar nicht das das alle Probleme löst, aber zumindest sorgt es nicht für irgendwelche Laufzeitprobleme, wenns dann mal läuft.
In erster Linie gehts ja um die Einstellungen der Programme die man mitnehmen will.
Das Script ist super. Meine Zutat hier: Wenn man ein einfaches \ als Quelluser angibt kann man auch Profile aus vorherigen Domänenmitgliedschaften reaktivieren.
Wenn man einen Domänenwechsel plant kann man in der alten Umgebung die Profile listen. Moveuser dazu gewandelt:
‘===========================================================================
‘ profileSIDs.vbs
‘
‘ extracted from moveuser.vbs
‘===========================================================================
Option Explicit
DIM strComputer
DIM objComputer
DIM objProfile, colProfiles, objWMIService, objSID
DIM dtStart
DIM strInfo, strContinue
strComputer =”.”
dtStart = TimeValue(Now())
Set objWMIService = GetObject(“winmgmts:{impersonationLevel=impersonate}!\\”& strComputer & “\root\cimv2″)
Set colProfiles = objWMIService.ExecQuery(“Select * from Win32_UserProfile”)
For Each objProfile in colProfiles
Set objSID = objWMIService.Get(“Win32_SID.SID=’” & objProfile.SID &”‘”)
Dim profileDOM, profileUser
profileDOM=objsid.referencedDomainName
profileUser=objsid.AccountName
if profileDOM = “” then
profileDOM=”unbekannt”
End If
if profileUser = “” then
profileUser=”unbekannt”
End If
strInfo=MsgBox( “ProfileSID: ” & objProfile.SID & VBNewLine & _
“Konto: ” & profileDOM + “\” + profileUser& VBNewLine & _
“Pfad: ” & objProfile.LocalPath & VBNewLine & _
” Genutzt: ” & objProfile.LastUseTime & VBNewLine & _
” Geladen: ” & objProfile.Loaded _
, vbOKOnly + vbInformation, “profileSID tool” )
Next
Sub Syntax
Wscript.Echo “Usage: profileSID” & VBNewLine
Wscript.Quit
End Sub
‘===Clear Variables===’
Set strComputer = Nothing
Set objComputer = Nothing
Set objProfile = Nothing
Set objWMIService = Nothing
Set objSID = Nothing
Set dtStart = Nothing
Set colProfiles = Nothing
Set strContinue = Nothing
Set strInfo = Nothing
**********************************************
Dann noch: Um alle verwaisten Profile nach dem umjoinen angeboten zu bekommen ist in moveuser eine Änderung notwendig: Das wscript.quit muss an dieser Stelle deaktiviert werden
ElseIf strContinue = 7 Then ’7=No, Cancel the move.
‘ Dont Exit profile loop Wscript.Quit
Else
**********************************************
Gruß
Michael
Hallo,
sollte es auch funktionieren ein Domainprofil in ein loakles Profil zu kopieren?
Gruß
Tim