Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité de passage
    Inscrit en
    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)

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro Walid Toumi
    Inscrit en
    juillet 2008
    Messages
    956
    Détails du profil
    Informations personnelles :
    Nom : Homme Walid Toumi
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 956
    Points : 1 587
    Points
    1 587

    Par défaut

    merci pour le partage

  3. #3
    Invité de passage
    Inscrit en
    juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : juillet 2010
    Messages : 2
    Points : 0
    Points
    0

    Par défaut

    Avec plaisir

    Toutes remarques/améliorations/corrections sont bienvenues.

  4. #4
    Invité de passage
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •