;----------------------------------------------------------------------------------------------------------------------------- ;Copyright (©) 2006-2009 Jonathan BISMUTH, Bis-IT ;clone_profil_V2 is free software ; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation ; ;clone_profil_v2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ;You should have received a copy of the GNU General Public License along with Add2Local ; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. ;Author : JOnathan BISMUTH, Bis-it. jbismuth@bis-it.fr; jonathan.bismuth@gmail.com ;Web site : http://blog.portail-mcse.net , http://www.bis-it.fr ;----------------------------------------------------------------------------------------------------------------------------- #region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_res_language=1036 #endregion ;**** Directives created by AutoIt3Wrapper_GUI **** #include #include #include #include #include Opt("ExpandEnvStrings", 1) $Dom = @LogonDomain $Comp = @ComputerName $OS = @OSVersion $CurrentProfile = @UserProfileDir $currentuser = @UserName $nbr = $CmdLine[0] $prof = "C:\Documents and Settings\" If $nbr = "0" Then Call("Gui") Else Call("Choice") EndIf Func Choice() Select Case $nbr >= 3 Call("Cmd") Case $CmdLine[1] == "/?" Call("Help") Exit Case Else MsgBox(0, "Erreur de syntaxe", "Une erreur de syntaxe a eu lieu, utilisez le commutateur /? pour afficher l'aide") Exit EndSelect EndFunc ;==>Choice Func Cmd() $SourceProfile = $CmdLine[1] $CibleProfile = $CmdLine[2] $CiblePWD = $CmdLine[3] Call("go",$SourceProfile, $CibleProfile, $CiblePWD) EndFunc ;==>Cmd Func Gui() $list = _FileListToArray($prof) For $i = 1 To $list[0] If StringInStr($list[$i], "~") <> 0 Then $NewName = StringReplace($list[$i], "~", "") DirMove($prof & $list[$i], $prof & $NewName) EndIf Next $list = _FileListToArray($prof) For $i = 1 To $list[0] If FileExists($prof & $list[$i] & "\NTUSER.DAT") = 0 Then FileOpen($prof & $list[$i] & "\NTUSER.DAT", 1) EndIf Next $max2 = $list[0] GUICreate("Outil de clonage des profils, Panthera method. v1.0", 550, 350) GUICtrlCreateLabel("Entrer le nom du profil source à cloner, un seul choix possible parmi ceux-ci", 30, 30, 500, 20) $j = 3 $group_1 = GUICtrlCreateGroup("Profils sur le poste", 5, 15, 600, 300) GUIStartGroup() For $i = 1 To $max2 $Hj = 20 * $j $r2 = Assign("checkCN" & $i & "", GUICtrlCreateLabel("" & $list[$i], 30, $Hj, 120, 20), 2) GUICtrlSetState($r2, $GUI_CHECKED) $j = $j + 1 Next GUICtrlCreateLabel("Entrez le nom du profil du compte utilisateur source :", 250, 130, 500, 20) $SourceUsr = GUICtrlCreateInput("", 250, 160, 100, 20) GUICtrlCreateLabel("Entrez le nom du compte utilisateur cible :", 250, 190, 500, 20) $CibleUsr = GUICtrlCreateInput("", 250, 210, 100, 20) GUICtrlCreateLabel("Entrez le password du compte utilisateur cible :", 250, 240, 500, 20) $CiblePaWD = GUICtrlCreateInput("", 250, 270, 100, 20) $button_1 = GUICtrlCreateButton("OK", 435, 80, 90, 30) GUISetState() ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $button_1 $SourceProfile = GUICtrlRead($SourceUsr) $CibleProfile = GUICtrlRead($CibleUsr) $CiblePWD = GUICtrlRead($CiblePaWD) If $SourceProfile = "" Or $CibleProfile = "" Then MsgBox(0, "erreur", "au moins un champs n'est pas rempli, sortie du programme...") Exit EndIf Call("go", $SourceProfile, $CibleProfile, $CiblePWD) EndSelect WEnd EndFunc ;==>Gui Func go($SourceProfile, $CibleProfile, $CiblePWD) ;MsgBox (0,"","renommage default user en .old") ; renommage default user en default user.old $DM = DirMove( '' & $prof & 'Default User', '' & $prof & 'Default User.old') ;MsgBox (0,"","renommage profil source en default user") ;renommage profil source en default user $DM = DirMove('' & $prof & $SourceProfile, '' & $prof & 'Default User') ;MsgBox (0,"","install subinacl") ;appplication des droits FileInstall ("subinacl.exe", "c:\subinacl.exe",1) ;MsgBox (0,"","modif des droits sur profil") $Sub1 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User" /grant="builtin\utilisateurs"=F',"c:\",@SW_HIDE ) $Sub2 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User" /grant="builtin\utilisateurs avec pouvoir"=F',"c:\",@SW_HIDE ) $Sub3 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User" /grant="tout le monde"=F',"c:\",@SW_HIDE ) $Sub1 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User\*" /grant="builtin\utilisateurs"=F',"c:\",@SW_HIDE ) $Sub2 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User\*" /grant="builtin\utilisateurs avec pouvoir"=F',"c:\",@SW_HIDE ) $Sub3 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User\*" /grant="tout le monde"=F',"c:\",@SW_HIDE ) sleep (1000) ;Authentification du nouvel utilisateur et création du profil FileInstall("dummy.exe", "c:\dummy.exe", 1) ;MsgBox (0,"","log avec le nouveau compte") RunAsSet($CibleProfile, $Dom, $CiblePWD,1) RunWait ("c:\dummy.exe","c:\",@SW_HIDE ) RunAsSet() sleep (1000) ;msgbox (0,"","fin log utilisateur") ;FileDelete("c:\dummy.exe") ;MsgBox (0,"","retour arrière subinacl") ;retour arrière, on nettoie les droits, et renomme les default user et profil source $Sub1 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User" /revoke="builtin\utilisateurs"',"c:\",@SW_HIDE ) $Sub2 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User" /revoke="builtin\utilisateurs avec pouvoir"',"c:\",@SW_HIDE ) $Sub3 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User" /revoke="tout le monde"',"c:\",@SW_HIDE ) $Sub1 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User\*" /revoke="builtin\utilisateurs"',"c:\",@SW_HIDE ) $Sub2 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User\*" /revoke="builtin\utilisateurs avec pouvoir"',"c:\",@SW_HIDE ) $Sub3 = RunWait (@ComSpec & ' /C ' & 'c:\subinacl.exe /subdirectories "' & $prof & 'Default User\*" /revoke="tout le monde"',"c:\",@SW_HIDE ) sleep (1000) ;MsgBox (0,"","retour arrière renommage default user et profil") if $SourceProfile <> $CibleProfile Then $DM = DirMove('' & $prof & 'Default User','' & $prof & $SourceProfile) sleep (1000) $DM2 = DirMove( '' & $prof & 'Default User.old', '' & $prof & 'Default User') Else $Sid = _Security__LookupAccountName ("" & $Dom & "\" &$CibleProfile) $RR = RegRead ("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\" &$Sid[0], "ProfileImagePath") $ModRR = "" & $RR & "."&$Dom $RW = RegWrite ("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\" &$Sid[0], "ProfileImagePath", "REG_EXPAND_SZ", $ModRR) $DM = DirMove('' & $prof & $CibleProfile,'' & $prof & '' & $CibleProfile & '.'&$Dom) sleep (1000) $DM = DirMove('' & $prof & 'Default User','' & $prof & $SourceProfile) sleep (1000) $DM2 = DirMove( '' & $prof & 'Default User.old', '' & $prof & 'Default User') EndIf MsgBox(0, "", "fin d'exécution de l'outil") FileDelete ("c:\subinacl.exe") FileDelete("c:\dummy.exe") Exit EndFunc ;==>go Func Help() MsgBox(0, "Syntaxe", "Sans arguments lance la version graphique, sinon :" & @LF & "" & @LF & "Arguments Obligatoires" & @LF & "" & @LF & "- Argument 1 : le dossier profil à migrer (préfixé automatiquement). Exemple : user1.machine1" & @LF & "- Argument 2 : nom de l'utilisateur du domaine pour qui migrer le profil " & @LF & "- Argument 3 : mot de passe du compte pour qui migrer le profil" & @LF & "" & @LF) EndFunc ;==>Help