Bonjour,
Voici deux scripts qui pourrons être utile à certains d'entre vous lors d'une migration d'un domaine à un autre.
Le but de ces scripts est de permettre aux utilisateurs de conserver leur profile tout en se connectant avec un nom d'utilisateur d'un autre domaine.
Prérequis.
- Edit : ces scripts partent du principe qu'un utilisateur x aura le même nom d'utilisateur d'un domaine à l'autre.
Les utilitaires suivant sont nécessaires.
Grep for windows Plus pratique que find.
icacls Pour les permissions sur les dossiers.
subinacl Pour les permissions dans la registry.
netdom Pour joindre le pc dans le nouveau domaine si besoin
psexec Pour l'exécution de commande avec des droits d'administration
Bat to exe converter Pour cacher les mots de passe entré dans votre batch et masquer les fenêtres.
Un VBS (a éditer) Pour déterminer le SID des utilisateurs.
Les différents domaines doivent être contactable par la machine hôte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Dim strUsername Dim strDomain Set oArgs=WScript.Arguments ' tableau d'arguments Set WshNetwork = WScript.CreateObject("WScript.Network") strUsername = WshNetwork.UserName strDomain = oArgs(0) if (strDomain = "DOMAIN_A") or (strDomain = "DOMAIN_B") then Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set objAccount = objWMIService.Get("Win32_UserAccount.Name='" & strUsername & "',Domain='" & strDomain & "'") getSID = objAccount.SID wscript.echo getSid end if
Un partage réseau avec ces utilitaires est également nécessaire.
Les utilisateurs doivent pouvoir écrire sur le c:\temp.
Et biensur éditer les scripts
Premier script
Edit :
A ajouter au login script :
A exécuter sur le profile de l'ancien domaine, avant la migration donc (Soit au login, soit à la main)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 rem exe generé par bat_to_exe converter @echo off if NOT EXIST "%userprofile%\lock" ( migration_domain_a.exe echo lock > "%userprofile%\lock" ) else ( echo Existe )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 echo off mkdir c:\temp\mig net use x: /d /yes net use x: \\serveur\partage x: rem ajout d'un utilisateur du nouveau domaine dans les admins locaux, pas forcement nécessaire. psexec /accepteula -u domaine_a\useradmin -p password \\%computername% cmd /c net localgroup administrators /add domain_b\useradmin rem copie icacls sur le c:\temp\mig pour être utilisé avec psexec copy icacls.exe c:\temp\mig rem copie sunbinacl sur le c:\temp\mig pour être utilisé avec psexec copy subinacl.exe c:\temp\mig rem export SID user domain_a dans la variable a cscript /Nologo NameToSID.vbs domain_a > c:\temp\mig\a set /P a=<c:\temp\mig\a echo %a% rem export SID user domain_b dans la variable b cscript /Nologo NameToSID.vbs domain_b > c:\temp\mig\b set /P b=<c:\temp\mig\b echo %b% rem exporte la clef de registre user domain_a avec le profile path user domain_a reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%a%" /v profileimagepath > c:\temp\mig\temp grep -o \\Doc.*\\.* c:\temp\mig\temp > c:\temp\mig\profile set /P profile=<c:\temp\mig\profile rem ajoute les permissions user domain_b sur le profile et la registry du user domain_a psexec /accepteula -u domain_b\useradmin -p password \\%computername% c:\temp\mig\icacls.exe "%systemdrive%%profile%" /grant domain_b\%username%:(OI)(CI)(M) /T psexec /accepteula -u domain_b\useradmin -p password \\%computername% c:\temp\mig\subinacl.exe /keyreg HKEY_users\%a% /grant=domain_b\%username% psexec /accepteula -u domain_b\useradmin -p password \\%computername% c:\temp\mig\subinacl.exe /subkeyreg HKEY_users\%a% /grant=domain_b\%username% rem supprime les fichiers temp. psexec /accepteula -u domain_b\useradmin -p password \\%computername% cmd /c rmdir /s /q \\%computername%\c$\temp\mig cd c:\ c: rem crée un fichier lock pour que le script ne s'exécute qu'une fois, si utilisé via login script. echo lock > "C:\Documents and Settings\%username%\lock" rem création des logs Echo %username% %computername% >> "\\serveur\partage\users_domain_a.txt" net use x: /d /yes
Second script
A exécuter sur le profile du nouveau domaine, après la migration donc (Soit au login, soit à la main)
A ajouter au login script :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 rem exe generé par bat_to_exe converter @echo off if NOT EXIST "%userprofile%\lock_domain_b" ( migration_domain_a.exe echo lock > "%userprofile%\lock_domain_b" ) else ( echo Existe )
Script "movepc.bat" appelé par le second script, pas besoin de le cacher en exe puisque c'est votre admin qui l'exécute et donc lui seul doit pouvoir y accéder
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 echo off rem entrez le fqdn nu nouveau domain dans la variable set FQDN = fqdn mkdir c:\temp\mig net use x: /d /yes net use x: \\serveur\partage x: psexec /accepteula -u domain_a\useradmin -p password \\%computername% cmd /c net localgroup administrators /add domain_b\useradmin rem export SID domain_a dans la variable a cscript /Nologo NameToSID.vbs domain_a > c:\temp\mig\a set /P a=<c:\temp\mig\a echo %a% rem remplace si besoin est, le profile health par le profile domain_a rem export SID domain_b dans la variable b cscript /Nologo NameToSID.vbs domain_b > c:\temp\mig\b set /P b=<c:\temp\mig\b echo %b% rem exporte la clef de registre domain_a pour le profile domain_a reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%a%" /v profileimagepath > c:\temp\mig\temp grep -o \\Doc.*\\.* c:\temp\mig\temp > c:\temp\mig\profile set /P profile=<c:\temp\mig\profile echo %profile% if not "%profile%" == "" ( rem importe la clef de registre domain_a pour le profile domain_b psexec /accepteula -u domain_b\useradmin -p password \\%computername% reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%b%" /v profileimagepath /t reg_expand_sz /d "%systemdrive%%profile%" /f ) rem balance la machine dans le domaine si nécessaire reg query "HKEY_LOCAL_MACHINE\system\currentcontrolset\services\tcpip\parameters" /v domain > c:\temp\mig\cmpdomkey grep -o "%FQDN%" c:\temp\mig\cmpdomkey > c:\temp\mig\cmpdom Set /P cmpdom=<c:\temp\mig\cmpdom if not "%cmpdom%" == "%FQDN%" ( copy netdom.exe c:\temp\mig psexec /accepteula -u domain_b\useradmin -p password \\%computername% cmd /c xcopy \\serveur\partage\movepc.bat \\%computername%\c$\temp\mig psexec /accepteula -u domain_b\useradmin -p password \\%computername% c:\temp\mig\movepc.bat ) rem suppression des fichiers temp psexec /accepteula -u domain_b\useradmin -p password \\%computername% cmd /c rmdir /s /q \\%computername%\c$\temp\mig rem crée un fichier lock pour que le script ne s'exécute qu'une fois, si utilisé via login script. echo lock_domain_b > "%systemdrive%%profile%\lock_domain_b" rem creeation des logs Echo %username% %computername% >> "\\serveur\partage\users_domain_b.txt" rem reboot du pc si nécessaire if not "%cmpdom%" == "%FQDN%" ( psexec /accepteula -u domain_b\useradmin -p password \\%computername% shutdown -r -t 10 -f -c "Computer moved to domain_b" ) else ( if not "%a%" == "" ( psexec /accepteula -u domain_b\useradmin -p password \\%computername% shutdown -r -t 10 -f -c "Profile domain_a used by domain_b user" ) ) c: net use x: /d
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 echo off cd c:\temp\mig c: netdom move %computername% /domain:"domain_b" /userd:domain_b\useradmin /passwordd:"password" /ou:"ou=xxx,ou=yyy,dc=mon,dc=organisation,dc=be" cls ping %computername% -n 18
Problèmes connus :
Les mots de passe enregistré par windows sont perdu (il se base sur le SID pour les décrypter)
Partager