OVH Cloud OVH Cloud

Parcourir une arborescence d'OU en vbs

1 réponse
Avatar
ESA
Bonjour,

Afin d'effectuer des traitements sur des comptes utilisateurs dans l'AD, je
souhaite parcourir l'arborescence des différentes OU.

Dès lors que j'ai connaissance (dans le programme) du nom complet de la
"branche", je sais effectuer le traitement.
Ma problèmatique est de déterminer mon arborescence

Du style une fonction, qui prends comme paramètre d'entrée le nom de mon OU
racine, et qui parcours toutes les OU "enfants".

(je contourne actuellement cette partie en fournissant un fichier .csv
contenant l'ensemble des OU existantes - cependant ce script n'est pas
spécialement souple
car l'arborescence AD évolue - et je pense qu'il doit bien y avoir une
solution plus efficace)

Merci pour vos idées ( pas vu sur script-center /)

Bon code

Merci

Manu

1 réponse

Avatar
Major TOM
J'ai fait ça, ça marche mais je suis sur qu'il y a mieux

Cordialement

Thierry

'<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>
Function CreateArray(TypeSearch)
'Description :
'------------
'Entrées :
'TypeSearch => Computers ou Users ou Containers ou OUs ou Domains ...
'Sorties :
'Retourne un tableau avec le type d'objet recherché"
Dim intSize
Dim objTypeSearch, objTypeSearch1, objTypeSearch2, objTypeSearch3
Dim objContainer
Dim objOUs, objOUsChildren2, objOUsChildren3

Select Case TypeSearch
Case "Containers"
'>>> Liste des containers depuis la racine du domaine
intSize = 0
'Remplissage des Containers dans un tableau
Set objContainer = GetObject("LDAP://" & strDefaultDN)
For Each objTypeSearch in objContainer
If Left(objTypeSearch.Name, 3) = "CN=" Then
ReDim Preserve arrTypeSearch(intSize)
arrTypeSearch(intSize) = objTypeSearch.Name
intSize = intSize + 1
End If
Next
'<<<

Case "OUs"
intSize = 0
'>>> Liste des OUs depuis la racine du domaine
Set objOUs = GetObject("LDAP://" & strDefaultDN)
For Each objTypeSearch1 in objOUs
If objTypeSearch1.Class = "organizationalUnit" Then
ReDim Preserve arrTypeSearch(intSize)
arrTypeSearch(intSize) = objTypeSearch1.Name
intSize = intSize + 1
'>>> Liste des OUs enfants 1er niveau
Set objOUsChildren2 = GetObject("LDAP://" & arrTypeSearch(intSize - 1) & _
"," & strDefaultDN)
For Each objTypeSearch2 in objOUsChildren2
If objTypeSearch2.Class = "organizationalUnit" Then
ReDim Preserve arrTypeSearch(intSize)
arrTypeSearch(intSize) = objTypeSearch2.Name & "," & _
objTypeSearch1.Name
intSize = intSize + 1

'>>> Liste des OUs enfants 2ème niveau
Set objOUsChildren3 = GetObject("LDAP://" & arrTypeSearch(intSize - 1) &
_
"," & strDefaultDN)
For Each objTypeSearch3 in objOUsChildren3
If objTypeSearch3.Class = "organizationalUnit" Then
ReDim Preserve arrTypeSearch(intSize)
arrTypeSearch(intSize) = objTypeSearch3.Name & "," & _
objTypeSearch2.Name & "," & _
objTypeSearch1.Name
intSize = intSize + 1
End If
Next
'<<<

End If
Next
'<<<

End If
Next
'<<<

Case "Domains"
strTypeSearch = ""
Case "Groups"
strTypeSearch = ""
Case "Users"
strTypeSearch = ""
End Select
CreateArray = arrTypeSearch
End Function

--

Par avance, merci de votre aide.

Thierry
"ESA" a écrit dans le message de news:

Bonjour,

Afin d'effectuer des traitements sur des comptes utilisateurs dans l'AD, je
souhaite parcourir l'arborescence des différentes OU.

Dès lors que j'ai connaissance (dans le programme) du nom complet de la
"branche", je sais effectuer le traitement.
Ma problèmatique est de déterminer mon arborescence

Du style une fonction, qui prends comme paramètre d'entrée le nom de mon OU
racine, et qui parcours toutes les OU "enfants".

(je contourne actuellement cette partie en fournissant un fichier .csv
contenant l'ensemble des OU existantes - cependant ce script n'est pas
spécialement souple
car l'arborescence AD évolue - et je pense qu'il doit bien y avoir une
solution plus efficace)

Merci pour vos idées ( pas vu sur script-center /)

Bon code

Merci

Manu