Précédent   Forum du club des développeurs et IT Pro > Systèmes > Windows > Vos contributions
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/07/2010, 11h52   #1
_Antarion_
Invité de passage
 
Inscription : juillet 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 2
Points : 0
Points : 0
Par défaut [Script] Migration de profils utilisateur.

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.

    Code :
    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
    Les différents domaines doivent être contactable par la machine hôte.
    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 :

Code :
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
)
A exécuter sur le profile de l'ancien domaine, avant la migration donc (Soit au login, soit à la main)
  • Code :
    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 :
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
)
  • Code :
    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
    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 :
    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)
_Antarion_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2010, 14h24   #2
I'm_HERE
Membre Expert
 
Avatar de I'm_HERE
 
Homme Walid Toumi
Inscription : juillet 2008
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Walid Toumi
Localisation : Tunisie

Informations forums :
Inscription : juillet 2008
Messages : 891
Points : 1 456
Points : 1 456
merci pour le partage
__________________

Gawk
Sed
ActivePerl
python
CoreUtils for Windows


I'm_HERE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2010, 11h02   #3
_Antarion_
Invité de passage
 
Inscription : juillet 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 2
Points : 0
Points : 0
Avec plaisir

Toutes remarques/améliorations/corrections sont bienvenues.
_Antarion_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2010, 10h48   #4
juliensim
Invité de passage
 
Inscription : octobre 2010
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 1
Points : 1
Points : 1
Il est génial ce script !!! Il fait tout ce que je fais en partie par script et en partie à la main !

c'est tout à fait ce genre de script que je cherche ...

Je suis moi-même un noob en scripting ...

le seul hic c'est que je dois passer d'un domaine A à un domain B et que le nom d'utilsateur change d'un domaine à l'autre (avant c'était julien et maintenant ce sera juliensim)

Quelqu'un a une idée ?

Merci d'avance,

Julien
juliensim est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h54.


 
 
 
 
Partenaires

Hébergement Web