OVH Cloud OVH Cloud

Recherche VBSCRIPT

5 réponses
Avatar
Samuel LEFEBVRE
Bonjour,

Je suis débutant en VBScript et votre aide sera la bienvenue.

J'ai créé un script pour l'ajout d'utilisateurs dans une base d'annuaire AD.
L'architecture AD est assez complexe et dispose d'OU correspondant à chaque
site, l'utilisateur doit être créé dans l'OU du site.

Par exemple : OU=Site-60580-Paris,OU=Utilisateurs,OU=FRANCE,DC=TOTO,DC=COM

Je souhaiterai, par une requête sur le code 60580, récupérer le
distinguishedname.

J'espère avoir été relativement clair dans ma demande.
D'avance merci,
Samuel LEFEBVRE

5 réponses

Avatar
Gilles LAURENT
"Samuel LEFEBVRE" a écrit dans le message de
news:eupd4$
| Bonjour,

Bonsoir,

[...]
| Par exemple :
| OU=Site-60580-Paris,OU=Utilisateurs,OU=FRANCE,DC=TOTO,DC=COM
| Je souhaiterai, par une requête sur le code 60580, récupérer le
| distinguishedname.

Ci-dessous le script VBScript 'getOUFromCode.vbs' permettant de
rechercher le DN d'une unité d'organisation dont le code numérique
transmis par argument est contenu dans son nom. La recherche s'effectue
de manière récursive à partir de la racine de l'annuaire Active
Directory :

+++ Usage
cscript getOUFromCode.vbs <code>

+++ Exemple
>cscript //nologo getOUFromCode.vbs 60580

--- Coupez ici : getOUFromCode.vbs ---

Option Explicit

' déclaration des variables
Dim oConn, oCmd, oRS
Dim strCode

' lecture du code de l'unité d'organisation transmis comme argument
strCode = WScript.Arguments(0)

' initialisation
Set oConn = CreateObject ("ADODB.Connection")
oConn.Open "Provider­sDSOObject"
Set oCmd = CreateObject ("ADODB.Command")
oCmd.ActiveConnection = oConn

' définition de la requête ldap
oCmd.CommandText = "<LDAP://" & GetObject("LDAP://rootDse"). _
Get("defaultNamingContext") & ">;" & _
"(&(objectCategory=organizationalUnit)" & _
");distinguishedname;subtree"

' exécution de la requête
Set oRS = oCmd.Execute

' parcours des OU à la recherche du code OU spécifié comme argument
While Not oRs.EOF
' recherche de l'OU contenant le code spécifié
If InStr (1, oRS.Fields ("distinguishedname"), strCode) Then
' le code OU a été trouvé
' affichage du DN
WScript.echo oRS.Fields ("distinguishedname")
End If
' poursuite de la recherche
oRs.MoveNext
Wend

--- Coupez ici : getOUFromCode.vbs ---

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Gilles LAURENT
"Gilles LAURENT" a écrit dans le message de
news:OJiF2$

La version PowerShell ;-)

+++ Usage
powershell .getOUFromCode.ps1 <code>

+++ Exemple
>powershell .getOUFromCode.ps1 60580

--- Coupez ici : getOUFromCode.ps1 ---

$code=$args
$oDs=New-Object System.DirectoryServices.DirectorySearcher
$oDs.Filter = "(&(objectCategory=organizationalUnit))"
$oDs.FindAll() | % {
if ($_.Path.contains($code)) {
$_.Properties.distinguishedname
}
}

--- Coupez ici : getOUFromCode.ps1 ---

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Samuel LEFEBVRE
Merci beaucoup pour ces informations !

Cordialement,
Samuel LEFEBVRE


"Gilles LAURENT" a écrit dans le message de
news:
"Gilles LAURENT" a écrit dans le message de
news:OJiF2$

La version PowerShell ;-)

+++ Usage
powershell .getOUFromCode.ps1 <code>

+++ Exemple
>powershell .getOUFromCode.ps1 60580

--- Coupez ici : getOUFromCode.ps1 ---

$code=$args
$oDs=New-Object System.DirectoryServices.DirectorySearcher
$oDs.Filter = "(&(objectCategory=organizationalUnit))"
$oDs.FindAll() | % {
if ($_.Path.contains($code)) {
$_.Properties.distinguishedname
}
}

--- Coupez ici : getOUFromCode.ps1 ---

--
Gilles LAURENT
http://glsft.free.fr




Avatar
Samuel LEFEBVRE
Y a-t-il possibilité de désactiver la recherche récursive ?
En effet, dans la réponse, j'obtiens toutes les OU enfants et je souhaiterai
juste avoir la première OU.

D'avance merci,
Samuel

"Gilles LAURENT" a écrit dans le message de
news:
"Gilles LAURENT" a écrit dans le message de
news:OJiF2$

La version PowerShell ;-)

+++ Usage
powershell .getOUFromCode.ps1 <code>

+++ Exemple
>powershell .getOUFromCode.ps1 60580

--- Coupez ici : getOUFromCode.ps1 ---

$code=$args
$oDs=New-Object System.DirectoryServices.DirectorySearcher
$oDs.Filter = "(&(objectCategory=organizationalUnit))"
$oDs.FindAll() | % {
if ($_.Path.contains($code)) {
$_.Properties.distinguishedname
}
}

--- Coupez ici : getOUFromCode.ps1 ---

--
Gilles LAURENT
http://glsft.free.fr




Avatar
Gilles LAURENT
"Samuel LEFEBVRE" a écrit dans le message de
news:
| Y a-t-il possibilité de désactiver la recherche récursive ?
| En effet, dans la réponse, j'obtiens toutes les OU enfants et je
| souhaiterai juste avoir la première OU.

Ce script n'affiche plus les OU enfants de l'OU cible :

--- Coupez ici : getOUFromCode.ps1 ---

$code=$args
$oDs=New-Object System.DirectoryServices.DirectorySearcher
$oDs.Filter = "(&(objectCategory=organizationalUnit))"
$oDs.FindAll() | % {
if ([regex]::match($_.path, "/OU=[^,]*$code").Success) {
$_.Properties.distinguishedname
}
}

--- Coupez ici : getOUFromCode.ps1 ---

--
Gilles LAURENT
http://glsft.free.fr