; 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
; 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
$DefPath = "%SystemDrive%\Documents and Settings\"
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
$DefPath = "%systemdrive%\Documents and Settings\"
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