Je viens à vous car j'ai mis au point un script qui est sensé être récursif mais qui veux pas ><
Sur le principe : j'ai un utilisateur qui appartient a différents groupes. Ces groupes contenant eux même d'autres groupes et ainsi de suite.
Mon idée, c'est : je prends le user, je tire la liste de ces groupe, je prends le premier groupe j'écris dans un fichier qui il est et qui est son parent, je regarde ces groupes, je prends le premier, j'écris etc... et ainsi de suite jusqu'à un groupe qui n'en contient pas d'autres. Et à ce moment là, on remonte un étage au dessus et on refait la même chose avec le second groupe. De cette manière on remonte petit à petit en faisant tous les groupes.
Mon soucis, c'est qu'arrivé au fond de la première branche, ben pas moyen de remonter
Je pense que ça vient du fait qu'il ne peut récupérer le nom du groupe au dessus.
J'ai fait de la récursivité en cours, mais j'ai toujours eu du mal ><
Je pense bien qu'il me manque un moyen de de revenir en arrière quand je suis au bout, mais je ne parvient pas à m'en sortir :/
Merci aux âmes charitables qui sauront me sortir de ce bourbier
le code :
Code : Tout sélectionner
Global $MOF_grp
Global $MOF_CSV = "***/***/***/RecursiveMemberOf_résultat.txt"
Global $MOF_handler_CSV
;petite fonction prise de _ADfunction.au3 et modifié pour faire bien les choses
;fonction qui va chercher la liste des memberOf d'un user AD et le retourne dans un tableau $memberof
Func ADGetUserGroups(ByRef $memberof, $user = @UserName)
Local $objItem
$strHostServer = $objRootDSE.Get("dnsHostName") ; Retrieve the name of the connected DC
$objItem = ObjGet("LDAP://" & $strHostServer & "/" & $user) ; Retrieve the COM Object for the logged on user
$memberof = $objItem.GetEx("memberof")
;~ MsgBox(64,"debug","memberof : "&$memberof)
;~ _ArrayDisplay($memberof)
$count = UBound($memberof)
_ArrayInsert($memberof, 0, $count)
EndFunc ;==>_ADGetUserGroups
Func RecursiveListGroup($MOF_userDN)
ADGetUserGroups($MOF_grp,$MOF_userDN)
;~ _ArrayDisplay($MOF_grp)
If IsArray($MOF_grp) Then
For $MOF_cpt=1 To $MOF_grp[0]
;~ MsgBox(64,"Fini", $MOF_grp[0])
;~ _ArrayDisplay($MOF_grp)
;on écrit le résultat dans le CSV
FileWrite($MOF_handler_CSV,"Père : "&_ADDNToSamAccountName($MOF_userDN)&" ----> Fils : "&_ADDNToSamAccountName($MOF_grp[$MOF_cpt])&@CRLF)
FileWrite($MOF_handler_CSV,"--------------------------------"&@CRLF)
;on rappelle la fonction pour aller plus bas
RecursiveListGroup($MOF_grp[$MOF_cpt])
Next
Else
;on écrit dans le CSV qu'il n'y a pas de fils pour ce groupe
FileWrite($MOF_handler_CSV,"Pas de descendance pour : "&_ADDNToSamAccountName($MOF_userDN)&"!"&@CRLF)
FileWrite($MOF_handler_CSV,"--------------------------------"&@CRLF)
EndIf
EndFunc
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $MOF_GO
;ouverture du fichier
$MOF_handler_CSV=FileOpen($MOF_CSV,1)
;on lit l'entrée de l'utilisateur (à savoir quel user AD on doit aller regarder)
$MOF_user = GUICtrlRead($MOF_user_input)
;on écrit l'en tête du fichier
FileWrite($MOF_handler_CSV,"--------"&_NowDate() &" "& _NowTime() &" -------- Fiche des groupes de : "&$MOF_user&" --------"&@CRLF)
;on met le nom donné sous la bonne forme pour AD
$MOF_user_DN = _ADSamAccountNameToFQDN($MOF_user)
;appel de la fonction récursive
RecursiveListGroup($MOF_user_DN)
;fermeture du fichier
FileClose($MOF_handler_CSV)
;Fin du programme
MsgBox(64,"Fini", "Traitement terminé")
EndSwitch
WEnd



