Lokale Windows-Benutzerprofile migrieren
4. Dezember 2007, 22:42 Uhr
Auf der Arbeit sind wir gerade dabei, von einer NT4-Domäne (von Samba bereitgestellt) zu einer Active Directory-Domäne zu wechseln. Natürlich müssen auch alle Clients umgestellt werden und die lokalen Windows-Benutzerprofile migriert werden, damit die Anwender ihre gewohnten Umgebung behalten und keine Daten verloren gehen.
Microsoft stellt dazu das Befehlszeilenprogramm moveuser.exe zur Verfügung, womit man ein lokales Profil einem anderen Benutzer zuweisen kann. Um uns die Arbeit zu erleichtern, habe ich ein kleines VBScript geschrieben, was auf einem Client sämtliche Benutzerprofile der alten Domäne den Benutzern in der neuen Domäne zuordnet. Profile vom Benutzer Administrator klammert das Script allerdings aus.
Vorrausetzungen
- Vertrauensstellung zwischen der alten und der neuen Domäne
moveuser.exeaus den Windows Server 2003 Resource Kit Tools- Benutzerkonto in beiden Domänen
- Lokale Administrationsrechte zum Ausführen des Scripts
Unser Vorgehen
- Als
ALTAdministratoram Client anmelden - Rechner in die Domäne NEU holen
- Als
NEUAdministratoranmelden LokaleBenutzerprofileMigrieren.vbsausführen- Fertig! ;)
LokaleBenutzerprofileMigrieren.vbs
'-------------------------------------------------------------------------------
' An die eigenen Bedürfnisse anpassen...
'-------------------------------------------------------------------------------
Private Const COMPUTER = "."
Private Const OLD_DOMAIN = "ALT"
Private Const NEW_DOMAIN = "NEU"
Private Const MOVEUSER_PATH = "\\server\ordner\moveuser.exe"
'-------------------------------------------------------------------------------
Private Const TemporaryFolder = 2
Private Const ForReading = 1
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_KEY_PROFILELIST = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
Private Const LOG_FILENAME = "moveuser.log"
Dim iChoice, oFSO, oWshShell, oRegistry, sLogFilePath, vSubkeys, vSubkey, oAccount, sStdOut, oTextFile
On Error Resume Next
iChoice = MsgBox("Sollen wirklich alle lokalen Benutzerprofile der Domäne """ & OLD_DOMAIN & """ nach """ & NEW_DOMAIN & """ migrieren werden?", vbQuestion + vbYesNo , "Migration der Benutzerprofile")
If (iChoice = vbYes) Then 'Wenn "Ja" gewählt wurde...
sStdOut = ""
Set oFSO = CreateObject("Scripting.FileSystemObject")
sLogFilePath = oFSO.GetSpecialFolder(TemporaryFolder) & "" & LOG_FILENAME
oFSO.DeleteFile sLogFilePath, True
Set oWshShell = CreateObject("WScript.Shell")
Set oRegistry = GetObject("winmgmts:\" & COMPUTER & "\root\default:StdRegProv")
oRegistry.EnumKey HKEY_LOCAL_MACHINE, REG_KEY_PROFILELIST, vSubkeys
For Each vSubkey In vSubkeys 'Für alle SIDs...
If (Len(vSubkey) > 8) Then 'Wenn KEINE System-SID...
Set oAccount = GetAccountObjectFromSID(vSubkey, COMPUTER)
If (oAccount.ReferencedDomainName = OLD_DOMAIN) Then 'Wenn alte Domäne...
If (LCase(oAccount.AccountName) <> "administrator") Then 'Wenn KEIN Administrator...
oWshShell.Run "%comspec% /c " & MOVEUSER_PATH & " " & OLD_DOMAIN & "" & oAccount.AccountName & " " & NEW_DOMAIN & "" & oAccount.AccountName & " >> """ & sLogFilePath & """", , True
End If
End If
End If
Next
If (oFSO.FileExists(sLogFilePath) = True) Then 'Wenn die Log-Datei vorhanden ist...
Set oTextFile = oFSO.OpenTextFile(sLogFilePath, ForReading)
sStdOut = oTextFile.ReadAll
oTextFile.Close
oFSO.DeleteFile sLogFilePath, True
End If
If (sStdOut <> "") Then 'Wenn migriert...
MsgBox sStdOut, vbOKOnly, "Migration der Benutzerprofile"
Else 'Wenn NICHT migriert...
MsgBox "Es wurden keine lokalen Benutzerprofile migriert.", vbOKOnly, "Migration der Benutzerprofile"
End If
End If
'...
Function GetAccountObjectFromSID(ByVal sSID, ByVal sComputer)
Dim oWMIService
If (sComputer = "") Then sComputer = "."
Set oWMIService = GetObject("winmgmts:\" & sComputer & "\root\cimv2")
Set GetAccountObjectFromSID = oWMIService.Get("Win32_SID.SID='" & sSID & "'")
End Function
Meine erste Variante von dem Script fand ich durch die Benutzung von WScript.Shell.Exec zwar besser, aber dazu braucht man Version 5.6 von den Windows Script – Technologien und die sind bei Windows 2000 Rechnern nicht standardmäßig installiert. :-/
LGm’s Blog » Blog Archiv » Exchange 2007: Mehrere Postfächer per Script anlegen
11. Dezember 2007, 22:43 Uhr
[...] LGm’s Blog « Lokale Windows-Benutzerprofile migrieren [...]
Florian
20. Mai 2009, 11:48 Uhr
Hi –
ist die Vertrauensstellung wirklich notwendig?
LGm
20. Mai 2009, 11:52 Uhr
Ja, die Vertrauensstellung zwischen der alten und der neuen Domäne ist leider notwendig.
Florian
28. Mai 2009, 11:15 Uhr
Hi,
leider funktioniert es nicht. Ich habe eine Testumgebung mit eine Nt4 Domäne, einem W2003 AD, einem beidseitigen Trust, einem XP Client und 2 Usern, die ich in der alten und in der neuen Domäne identisch angelegt habe. MUss das mit ADMT gemacht worden sein? Nachdem ich den Client in die neue Domäne geholt habe funktioniert das Script nicht. “Es wurden keine ..”. Ich habe das Script angepasst mit COMPUTERNAME, OLD_DOMAIN, NEW_DOMAIN und MOVEUSERPATH (lokal). Irgendwas stimmt nicht.
Florian
LGm
28. Mai 2009, 14:19 Uhr
> MUss das mit ADMT gemacht worden sein?
Ja leider! Die Benutzer in der alten und in der neuen Domänen müssen die gleiche SID haben. Das bekommst du leider nur mit dem “Active Directory Migration Tool” von Microsoft hin.