IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions Discussion :

[Script] Migration de profils utilisateur.


Sujet :

Vos contributions

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 1
    Points
    1
    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 : 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
      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 : 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
    )
    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
      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
    )
    • 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
      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
      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)

  2. #2
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    merci pour le partage

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Avec plaisir

    Toutes remarques/améliorations/corrections sont bienvenues.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    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

Discussions similaires

  1. Script pour supprimer des profils utilisateurs
    Par kevinf dans le forum Windows
    Réponses: 0
    Dernier message: 20/01/2015, 11h49
  2. Migration profil utilisateurs sur un nouveau domaine
    Par ghostrider95 dans le forum Windows Serveur
    Réponses: 13
    Dernier message: 10/12/2011, 18h12
  3. Réponses: 1
    Dernier message: 22/09/2011, 15h51
  4. Script de migration de données utilisateurs
    Par Dr.Wily dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 21/09/2010, 16h37
  5. Scripts de generation de profils utilisateurs, mail, etc !
    Par mims1664 dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 19/02/2009, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo