; The original file is: W2D301.AU3 ; copyright Jonathan BISMUTH, Bis-IT 2004-2009. ; Mail : jbismuth@bis-it.fr / jonathan.bismuth@gmail.com ; Portions created by Lillo Lillo.prj@gmail.com ; Copyright (C) 2009 Lillo ; Portions created by Panthera ; Copyright (C) 2009 Panthera ; This program 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, either version 3 of the License, or ; (at your option) any later version. ; This program 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 Foobar. If not, see . #include #include #include #Include #include #include #include Opt("ExpandEnvStrings", 1) $Dom = @LogonDomain $WkDir = "%SystemDrive%\W2D3" $profil = "" $userC1 = "" $Pass = "" $nbr = $CmdLine[0] dim $ErrorLog ;## variables d'initialisation ## $del = "" $DPath = "%SystemDrive%\Documents and Settings\" $DefPath = "%SystemDrive%\Documents and Settings\" if $nbr = "0" Then call ("Gui") else call ("Choice") EndIf func Choice() Select case $nbr = 3 or $nbr = 4 or $nbr = 5 or $nbr = 6 call ("Cmmd") 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 1 EndSelect EndFunc func Cmmd() ; modifier le chemin avec le bon $DefPath if $CmdLine[0] >= 4 Then if $CmdLine[4] = 1 then $DefPath = "%Windir%\profiles\" endif Else if @OSVersion = "WIN_VISTA" or @OSVersion ="WIN_2008" Then $DefPath = "%SystemDrive%\Users\" Else $DefPath = "%SystemDrive%\Documents and Settings\" EndIf endif if $CmdLine[0] >= 5 Then if $CmdLine[5] = 1 then $del = "1" endif Else $del = "0" endif ;## création du fichier de Log ### $ErrorLog = FileOpen ("ErrorLog.txt",1) $tCur = _Date_Time_GetLocalTime() $Date = _Date_Time_SystemTimeToDateTimeStr($tCur) FileWriteLine ($ErrorLog, "Démarrage de l'outil de repermissionnement de profils le : " &$Date) ;## création du dossier de travail if fileExists ("c:\W2D3") = 0 Then $DC = DirCreate ("C:\W2D3") if $DC = 0 Then FileWriteLine ($ErrorLog, "Impossible de créer le dossier W2D3, veuillez exécuter cet outil depuis un compte adminsitrateur du poste") Exit 2 EndIf EndIf $SubACL = FileInstall ("subinacl.exe", $WkDir & "\subinacl.exe", 1) $Reg = FileInstall ("reg.exe",$WkDir & "\reg.exe", 1) $Dummy = FileInstall("dummy.exe", $WkDir & "\dummy.exe",1) $nbr = $CmdLine[0] $profil = $CmdLine[1] $userC1 = $CmdLine[2] $Pass = $CmdLine[3] if $nbr = 6 Then call ("SemiAuto") Exit EndIf ;## on recherche le SID de l'utilisateur du domaine ### $SID = _Security__LookupAccountName ($dom & "\" &$USERC1) if $SID[0] = "" Then $ErrorLog = FileOpen ("ErrorLog",1) FileWriteLine ($ErrorLog, "Erreur, SID introuvable sur le domaine de logon") exit 3 EndIf ;## on crée un pseudo-profil vide pour l'utilisateur qui ne s'est pas encore connecté ### RunAsWait ($userC1, $Dom, $Pass,1, $WkDir & "\dummy.exe",$WkDir,@SW_HIDE) if @error <> 0 then FileWriteLine ($ErrorLog, "Impossible de créer le profil temporaire du nouvel utilisateur, ou d'exécuter le dummy. Sortie du programme") Exit 5 EndIf ;## on lit la valeur du profil $RSubKey = Regread ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"&$SID[0], "ProfileImagePath") ;## on garde l'ancien chemin pour suppresion future (à demander) $TempProf = $RSubKey ;## Re permissionnement ### $RM = RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"&$SID[0], "ProfileImagePath","REG_EXPAND_SZ","%SystemDrive%\Documents and Settings\"& $profil) if $RM = 0 then FileWriteLine ($ErrorLog, "Impossible de modifier le chemin du profil du nouvel utilisateur. Sortie du programme") Exit 6 EndIf ;## Permissionnement des fichiers $DIR = RunWait (@ComSpec & ' /C ' & $WkDir & '\subinacl.exe /subdirectories "' & $DefPath & $profil & '" /grant=' & $Dom & '\' & $userC1 & '=F /setowner="' & $dom & '\' & $userC1 & '"','',@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les dossiers de l'utilisateur. Sortie du programme") Exit 7 EndIf $SubDir = RunWait (@ComSpec & ' /C ' & $WkDir & '\subinacl.exe /subdirectories "' & $DefPath & $profil &'\*" /grant=' & $Dom & '\' & $userC1 & '=F /setowner="' & $dom &'\' & $userC1 & '"','',@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les fichiers de l'utilisateur. Sortie du programme") Exit 8 EndIf ;## Permissionnement du registre ;## Chargement du registre $regL = RunWait (@ComSpec & ' /C ' & $WkDir & '\reg load HKLM\tempUser "'& $DefPath & $profil & '\ntuser.dat"','',@SW_HIDE) if @error <> 0 or $regL <> 0 Then FileWriteLine ($ErrorLog, "Impossible de charger le registre. Sortie du programme") Exit 9 EndIf $Sub = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /keyreg HKEY_LOCAL_MACHINE\tempUser\ /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les clés du registre de l'utilisateur. Sortie du programme") Exit 10 EndIf $SubK = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /keyreg HKEY_LOCAL_MACHINE\tempUser\* /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) $SubKeyReg = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /subkeyreg HKEY_LOCAL_MACHINE\tempuser\ /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les subkeys du registre de l'utilisateur. Sortie du programme") Exit 11 EndIf $regU = RunWait (@ComSpec & " /C " & $WkDir & "\reg unload HKLM\tempUser","",@SW_HIDE) if @error <> 0 or $regL <> 0 Then FileWriteLine ($ErrorLog, "Impossible de décharger le registre. Sortie du programme") Exit 12 EndIf ;## suppression de l'ancien profil si nécessaire ### if $del = "1" Then $RM = DirRemove ($TempProf, 1) if $RM = 0 Then FileWriteLine ($ErrorLog, "Impossible de supprimer l'ancien profil. Sortie du programme") Exit 13 EndIf EndIf $tCur2 = _Date_Time_GetLocalTime() $Date2 = _Date_Time_SystemTimeToDateTimeStr($tCur2) FileWriteLine ($ErrorLog, "Repermissionnement effectué avec succès. Fin du programme à " &$Date2) $RM = DirRemove ($WkDir, 1) FileClose ($ErrorLog) Exit 99 EndFunc func Gui() ;################"mode GUI################## GUICreate(" Entrez les paramètres nécessaires", 565,255, -1); WS_EX_ACCEPTFILES $userC1 = GUICtrlCreateInput ( "", 15, 65, 220, 20) GUICtrlSetState(-1,$GUI_FOCUS) GUICtrlCreateLabel ("Entrez le nom de l'utilisateur vers lequel le profil est à migrer. exemple : user1", 15, 30, 220, 35) ; first cell 50 width $Pass = GUICtrlCreateInput ( "", 250, 65, 220, 20, $ES_PASSWORD) GUICtrlCreateLabel ("Entrez le mot de passe de l'utilisateur concerné", 250, 30, 220, 35) ; first cell 50 width $profil = GUICtrlCreateInput ("", 15,165, 280, 20) GUICtrlCreateLabel ("Entrez le nom du profil. Celui-ci sera préfixé par %systemdrive%\Documents and Settings\ ou %Windir%\profiles\ suivant la version de Windows. Exemple : user1.machine1", 15, 120, 280, 40) ; first cell 50 width $DPath = GUICtrlCreateCheckbox ("la machine d'où migrer est un NT 4.0 (dossier de profil : ""%Windir%\profiles\"") ", 15, 200) $del1 = GUICtrlCreateCheckbox ("supprimer le profil temporaire", 15, 220) GUICtrlCreateLabel ("(à utiliser à vos risques et périls si l'utilisateur a déjà ouvert une session avec son nouveau compte!)",34,240) $okbutton = GUICtrlCreateButton("OK", 500, 65, 60, 20) GUISetState(@SW_SHOW) $msg = 0 While $msg <> $GUI_EVENT_CLOSE $msg = GUIGetMsg() Select Case $msg = $okbutton $DPath = GUICtrlRead($DPath) $del = GUICtrlRead($del1) $userC1 = GUICtrlRead($userC1) $Pass = GUICtrlRead($Pass) $profil = GUICtrlRead($profil) ProgressOn("barre de progression", "Repermissionnement en cours", "0%") if $DPath = 1 Then $DefPath = "%Windir%\profiles\" Else if @OSVersion = "WIN_VISTA" or @OSVersion ="WIN_2008" Then $DefPath = "%SystemDrive%\Users\" Else $DefPath = "%SystemDrive%\Documents and Settings\" EndIf endif ProgressSet(5 , "Permissionnement en cours", "Détection du chemin de profil") ;## création du fichier de Log ### $ErrorLog = FileOpen ("ErrorLog.txt",1) $tCur = _Date_Time_GetLocalTime() $Date = _Date_Time_SystemTimeToDateTimeStr($tCur) FileWriteLine ($ErrorLog, "Démarrage de l'outil de repermissionnement de profils le : " &$Date) ;## création du dossier de travail ProgressSet(10 , "Permissionnement en cours", "création du répertoire de travail") if fileExists ("c:\W2D3") = 0 Then $DC = DirCreate ("C:\W2D3") if $DC = 0 Then FileWriteLine ($ErrorLog, "Impossible de créer le dossier W2D3, veuillez exécuter cet outil depuis un compte adminsitrateur du poste") ProgressOff() msgbox (0,"Erreur","Impossible de créer le dossier W2D3, veuillez exécuter cet outil depuis un compte adminsitrateur du poste") Exit 3 EndIf EndIf ProgressSet(15 , "Permissionnement en cours", "installation des binaires") $SubACL = FileInstall ("subinacl.exe", $WkDir & "\subinacl.exe", 1) $Reg = FileInstall ("reg.exe",$WkDir & "\reg.exe", 1) $Dummy = FileInstall("dummy.exe", $WkDir & "\dummy.exe",1) ProgressSet(20 , "Permissionnement en cours", "détection du Sid utilisateur") ;## on recherche le SID de l'utilisateur du domaine ### $SID = _Security__LookupAccountName ($dom & "\" &$USERC1) if $SID[0] = "" Then $ErrorLog = FileOpen ("ErrorLog",1) FileWriteLine ($ErrorLog, "Erreur, SID introuvable sur le domaine de logon") ProgressOff() MsgBox(0,"Erreur","Erreur, SID introuvable sur le domaine de logon"&chr(13)&chr(13)&"Login non créé sur le domaine ou erreur login") exit 4 EndIf ProgressSet(25 , "Permissionnement en cours", "création du profil temporaire") ;## on crée un pseudo-profil vide pour l'utilisateur qui ne s'est pas encore connecté ### RunAsWait ($userC1, $Dom, $Pass,1, $WkDir & "\dummy.exe",$WkDir,@SW_HIDE) if @error <> 0 then FileWriteLine ($ErrorLog, "Impossible de créer le profil temporaire du nouvel utilisateur, ou d'exécuter le dummy. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible de créer le profil temporaire du nouvel utilisateur, ou d'exécuter le dummy."&chr(13)&"Controler le login et le mot de passe utilisateur domaine") Exit 5 EndIf ;## on lit la valeur du profil $RSubKey = Regread ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"&$SID[0], "ProfileImagePath") ;## on garde l'ancien chemin pour suppresion future (à demander) $TempProf = $RSubKey ;## Re permissionnement ### ProgressSet(30 , "Permissionnement en cours", "Modification du chemin de profil") $RM = RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"&$SID[0], "ProfileImagePath","REG_EXPAND_SZ","%SystemDrive%\Documents and Settings\"& $profil) if $RM = 0 then FileWriteLine ($ErrorLog, "Impossible de modifier le chemin du profil du nouvel utilisateur. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible de modifier le chemin du profil du nouvel utilisateur.") Exit 6 EndIf ;## Permissionnement des fichiers ProgressSet(35 , "Permissionnement en cours", "Modification des droits sur le profil") $DIR = RunWait (@ComSpec & ' /C ' & $WkDir & '\subinacl.exe /subdirectories "' & $DefPath & $profil & '" /grant=' & $dom & '\' & $userC1 & '=F /setowner="' & $dom & '\' & $userC1 & '"','',@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les dossiers de l'utilisateur. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible d'exécuter subinacl sur les dossiers de l'utilisateur.") Exit 7 EndIf $SubDir = RunWait (@ComSpec & ' /C ' & $WkDir & '\subinacl.exe /subdirectories "' & $DefPath & $profil &'\*" /grant=' & $dom & '\' & $userC1 & '=F /setowner="' & $dom &'\' & $userC1 & '"','',@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les fichiers de l'utilisateur. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible d'exécuter subinacl sur les fichiers de l'utilisateur.") Exit 8 EndIf ;## Permissionnement du registre ;## Chargement du registre ProgressSet(50 , "Permissionnement en cours", "Chargement du registre") $regL = RunWait (@ComSpec & ' /C ' & $WkDir & '\reg load HKLM\tempUser "'& $DefPath & $profil & '\ntuser.dat"','',@SW_HIDE) if @error <> 0 or $regL <> 0 Then FileWriteLine ($ErrorLog, "Impossible de charger le registre. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible de charger le registre."&chr(13)&"Contôler chemin ancien profile,...") Exit 9 EndIf ProgressSet(60 , "Permissionnement en cours", "Modification des droits sur le registre") $Sub = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /keyreg HKEY_LOCAL_MACHINE\tempUser\ /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les clés du registre de l'utilisateur. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible d'exécuter subinacl sur les clés du registre de l'utilisateur.") Exit 10 EndIf $SubK = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /keyreg HKEY_LOCAL_MACHINE\tempUser\* /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) $SubKeyReg = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /subkeyreg HKEY_LOCAL_MACHINE\tempuser\ /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les subkeys du registre de l'utilisateur. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible d'exécuter subinacl sur les subkeys du registre de l'utilisateur.") Exit 11 EndIf ProgressSet(75 , "Permissionnement en cours", "Déchargement du registre") $regU = RunWait (@ComSpec & " /C " & $WkDir & "\reg unload HKLM\tempUser","",@SW_HIDE) if @error <> 0 or $regL <> 0 Then FileWriteLine ($ErrorLog, "Impossible de décharger le registre. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible de décharger le registre.") Exit 12 EndIf ;## suppression de l'ancien profil si nécessaire ### ProgressSet(90 , "Permissionnement en cours", "Suppression des fichiers temporaires") $RM = DirRemove ($WkDir, 1) if $del = 1 Then $RM2 = DirRemove ($TempProf, 1) if $RM = 0 Then FileWriteLine ($ErrorLog, "Impossible de supprimer l'ancien profil. Sortie du programme") ProgressOff() MsgBox(0,"Erreur","Impossible de supprimer l'ancien profil.") Exit 13 Else ProgressSet(100 , "Fin du permissionnement", "Repermissionnement effectué avec succès. Fin du programme.") FileWriteLine ($ErrorLog, "Repermissionnement effectué avec succès. Fin du programme") sleep (1000) ProgressOff() msgbox (0,"Fin de l'exécution du programme", "Le processus de repermissionnement s'est correctement exécuté") if $ErrorLog <> "" Then FileClose ($ErrorLog) EndIf Exit 99 EndIf Else ProgressSet(100 , "Fin du permissionnement", "Repermissionnement effectué avec succès. Fin du programme.") $tCur2 = _Date_Time_GetLocalTime() $Date2 = _Date_Time_SystemTimeToDateTimeStr($tCur2) FileWriteLine ($ErrorLog, "Repermissionnement effectué avec succès. Fin du programme à " &$Date2) sleep (1000) ProgressOff() msgbox (0,"Fin de l'exécution du programme", "Le processus de repermissionnement s'est correctement exécuté") if $ErrorLog <> "" Then FileClose ($ErrorLog) EndIf exit 99 EndIf EndSelect WEnd exit EndFunc func SemiAuto() ;################"mode GUI################## GUICreate(" Migration du profile", 565,255, -1); WS_EX_ACCEPTFILES GUISetState(@SW_SHOW) $msg = 0 ; While $msg <> $GUI_EVENT_CLOSE $msg = GUIGetMsg() ProgressOn("barre de progression", "Repermissionnement en cours", "0%") ProgressSet(5 , "Permissionnement en cours", "Détection du chemin de profil") ;## création du fichier de Log ### $ErrorLog = FileOpen ("ErrorLog.txt",1) $tCur = _Date_Time_GetLocalTime() $Date = _Date_Time_SystemTimeToDateTimeStr($tCur) FileWriteLine ($ErrorLog, "Démarrage de l'outil de repermissionnement de profils le : " &$Date) ;## création du dossier de travail ProgressSet(10 , "Permissionnement en cours", "création du répertoire de travail") if fileExists ("c:\W2D3") = 0 Then $DC = DirCreate ("C:\W2D3") if $DC = 0 Then FileWriteLine ($ErrorLog, "Impossible de créer le dossier W2D3, veuillez exécuter cet outil depuis un compte adminsitrateur du poste") ProgressOff() Exit 3 EndIf EndIf ProgressSet(15 , "Permissionnement en cours", "installation des binaires") $SubACL = FileInstall ("subinacl.exe", $WkDir & "\subinacl.exe", 1) $Reg = FileInstall ("reg.exe",$WkDir & "\reg.exe", 1) $Dummy = FileInstall("dummy.exe", $WkDir & "\dummy.exe",1) ProgressSet(20 , "Permissionnement en cours", "détection du Sid utilisateur") ;## on recherche le SID de l'utilisateur du domaine ### $SID = _Security__LookupAccountName ($Dom & "\" &$userC1) if $SID[0] = "" Then $ErrorLog = FileOpen ("ErrorLog",1) FileWriteLine ($ErrorLog, "Erreur, SID introuvable sur le domaine de logon") ProgressOff() exit 4 EndIf ProgressSet(25 , "Permissionnement en cours (peut prendre 2 minutes)", "création du profil temporaire") ;## on crée un pseudo-profil vide pour l'utilisateur qui ne s'est pas encore connecté ### RunAsWait ($userC1, $Dom, $Pass,1, $WkDir & "\dummy.exe",$WkDir,@SW_HIDE) if @error <> 0 then FileWriteLine ($ErrorLog, "Impossible de créer le profil temporaire du nouvel utilisateur, ou d'exécuter le dummy. Sortie du programme") ProgressOff() Exit 5 EndIf ;## on lit la valeur du profil $RSubKey = Regread ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"&$SID[0], "ProfileImagePath") ;## on garde l'ancien chemin pour suppresion future (à demander) $TempProf = $RSubKey ;## Re permissionnement ### ProgressSet(30 , "Permissionnement en cours", "Modification du chemin de profil") $RM = RegWrite ("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\"&$SID[0], "ProfileImagePath","REG_EXPAND_SZ","%SystemDrive%\Documents and Settings\"& $profil) if $RM = 0 then FileWriteLine ($ErrorLog, "Impossible de modifier le chemin du profil du nouvel utilisateur. Sortie du programme") ProgressOff() Exit 6 EndIf ;## Permissionnement des fichiers ProgressSet(35 , "Permissionnement en cours", "Modification des droits sur le profil") $DIR = RunWait (@ComSpec & ' /C ' & $WkDir & '\subinacl.exe /subdirectories "' & $DefPath & $profil & '" /grant=' & $dom & '\' & $userC1 & '=F /setowner="' & $dom & '\' & $userC1 & '"','',@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les dossiers de l'utilisateur. Sortie du programme") ProgressOff() Exit 7 EndIf $SubDir = RunWait (@ComSpec & ' /C ' & $WkDir & '\subinacl.exe /subdirectories "' & $DefPath & $profil &'\*" /grant=' & $dom & '\' & $userC1 & '=F /setowner="' & $dom &'\' & $userC1 & '"','',@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les fichiers de l'utilisateur. Sortie du programme") ProgressOff() Exit 8 EndIf ;## Permissionnement du registre ;## Chargement du registre ProgressSet(50 , "Permissionnement en cours", "Chargement du registre") $regL = RunWait (@ComSpec & ' /C ' & $WkDir & '\reg load HKLM\tempUser "'& $DefPath & $profil & '\ntuser.dat"','',@SW_HIDE) if @error <> 0 or $regL <> 0 Then FileWriteLine ($ErrorLog, "Impossible de charger le registre. Sortie du programme") ProgressOff() Exit 9 EndIf ProgressSet(60 , "Permissionnement en cours", "Modification des droits sur le registre") $Sub = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /keyreg HKEY_LOCAL_MACHINE\tempUser\ /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les clés du registre de l'utilisateur. Sortie du programme") ProgressOff() Exit 10 EndIf $SubK = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /keyreg HKEY_LOCAL_MACHINE\tempUser\* /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) $SubKeyReg = RunWait (@ComSpec & " /C " & $WkDir & "\subinacl.exe /subkeyreg HKEY_LOCAL_MACHINE\tempuser\ /grant="& $dom &"\"& $userC1 &"=F /setowner="& $dom &"\"& $userC1 &"","",@SW_HIDE) if @error <> 0 Then FileWriteLine ($ErrorLog, "Impossible d'exécuter subinacl sur les subkeys du registre de l'utilisateur. Sortie du programme") ProgressOff() Exit 11 EndIf ProgressSet(75 , "Permissionnement en cours", "Déchargement du registre") $regU = RunWait (@ComSpec & " /C " & $WkDir & "\reg unload HKLM\tempUser","",@SW_HIDE) if @error <> 0 or $regL <> 0 Then FileWriteLine ($ErrorLog, "Impossible de décharger le registre. Sortie du programme") ProgressOff() Exit 12 EndIf ;## suppression de l'ancien profil si nécessaire ### ProgressSet(90 , "Permissionnement en cours", "Suppression des fichiers temporaires") $RM = DirRemove ($WkDir, 1) if $del = 1 Then $RM2 = DirRemove ($TempProf, 1) if $RM = 0 Then FileWriteLine ($ErrorLog, "Impossible de supprimer l'ancien profil. Sortie du programme") ProgressOff() Exit 13 Else ProgressSet(100 , "Fin du permissionnement", "Repermissionnement effectué avec succès. Fin du programme.") FileWriteLine ($ErrorLog, "Repermissionnement effectué avec succès. Fin du programme") sleep (1000) ProgressOff() if $ErrorLog <> "" Then FileClose ($ErrorLog) EndIf Exit 99 EndIf Else ProgressSet(100 , "Fin du permissionnement", "Repermissionnement effectué avec succès. Fin du programme.") $tCur2 = _Date_Time_GetLocalTime() $Date2 = _Date_Time_SystemTimeToDateTimeStr($tCur2) FileWriteLine ($ErrorLog, "Repermissionnement effectué avec succès. Fin du programme à " &$Date2) sleep (1000) ProgressOff() if $ErrorLog <> "" Then FileClose ($ErrorLog) EndIf exit 99 EndIf ; WEnd exit EndFunc func Help() msgbox (0, "Syntaxe","Sans arguments lance la version graphique, sinon :"& @LF &""& @LF &"Arguments Obligatoires"& @LF &""& @LF &"- Argument 1 : le dossier profil à migrer . Exemple : préfixé automatiquement). Exemple : user1.machine1"& @LF &"- Argument 2 : le nom de l'utilisateur du domaine vers lequel migrer le profil source"& @LF &"- Argument 3 : le mot de passe de l'utilisateur cible"& @LF &""& @LF &"Argument facultatif"& @LF &""& @LF &"- Argument 3 : mettre à 1 si l' OS est un NT 4.0"& @LF &"- Argument 4 : mettre à 1 si l'ancien profil doit être supprimé après la copie (à vos risques et périls!)"& @LF &"- Argument 5 : mettre à 1 si vous souhaitez passer mode hybride (arguments puis GUI de suivi)" &@LF) EndFunc