Question
[Résolu]Lister les OU de 1er niveau uniquement
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 12 ans 4 semaines #10121
par olivia
[Résolu]Lister les OU de 1er niveau uniquement a été créé par olivia
Bonjour,
Quelqu'un saurait-il comment afficher seulement les unités d'organisations à la racine sans les sous OU.
merci<br><br>Message édité par: Arnaud, à: 1/09/11 11:24
Quelqu'un saurait-il comment afficher seulement les unités d'organisations à la racine sans les sous OU.
merci<br><br>Message édité par: Arnaud, à: 1/09/11 11:24
Connexion ou Créer un compte pour participer à la conversation.
- Alan Pinard
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 77
- Remerciements reçus 0
il y a 12 ans 4 semaines #10130
par Alan Pinard
Alan Pinard
Version A
Réponse de Alan Pinard sur le sujet Re:Unité d'Organisation
Bonjour Sam87,
Essaie ce bout de code sur un domaine contrôleur. Ce n'est surement pas la méthode la meilleur mais je crois que tu pourras commencer avec cela:
[code:1]
$LdapQuery = \"(&(objectCategory=organizationalUnit))\"
$DirectoryEntry = new-object system.directoryservices.directoryentry
$DirectorySearcher = new-object system.directoryservices.directorysearcher -argumentlist $DirectoryEntry,$LdapQuery
$OUList = $DirectorySearcher.findAll()
$OUList | %{If(($_.Path.Split(\",\"«»).Count) -le 3) {$_.Path}}
[/code:1]
En espérant que ça te donne un coup de main!
Alan
Essaie ce bout de code sur un domaine contrôleur. Ce n'est surement pas la méthode la meilleur mais je crois que tu pourras commencer avec cela:
[code:1]
$LdapQuery = \"(&(objectCategory=organizationalUnit))\"
$DirectoryEntry = new-object system.directoryservices.directoryentry
$DirectorySearcher = new-object system.directoryservices.directorysearcher -argumentlist $DirectoryEntry,$LdapQuery
$OUList = $DirectorySearcher.findAll()
$OUList | %{If(($_.Path.Split(\",\"«»).Count) -le 3) {$_.Path}}
[/code:1]
En espérant que ça te donne un coup de main!
Alan
Alan Pinard
Version A
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 12 ans 4 semaines #10132
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:Unité d'Organisation
Bonjour,
Versiona, tu y étais presque, sauf que ta méthode de \"filtre\" ne peut fonctionner car tu ne sais pas comment est constitué le nom de domaine (microsoft.com ou zune.microsoft.com par exemple)
L'objet DirectorySearcher a une propriete SearchScope qui est par defaut à la valeur 'SubTree', c'est pour cela que la recherche te remonte tout.
Donc :
[code:1]
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objDomain
$objSearcher.Filter = '(&(objectCategory=organizationalUnit))'
$objSearcher.SearchScope = 'OneLevel'
$objSearcher.PageSize = 500
$objSearcher.SizeLimit = 1000
$objSearcher.FindAll()
[/code:1]
Le PageSize et SizeLimit, permet de gérer un trés grand nombre d'objet retourné par la requette LDAP.
Bien Cordialement,
Richard Lazaro.
PS :
@Versiona : Pense à utiliser le cmdlet Where-Object à la place d'une condition dans un Foreach-Object
[code:1]
$OUList | Where-Object{$_.Path.Split(\",\"«»).Count -le 3}
[/code:1]
A noter aussi, qu'il est préférable d'utiliser Foreach-Object à la palce de % pour que les \"nouveaux\" sur PowerShell puissent comprendre plus facilement ;]
Versiona, tu y étais presque, sauf que ta méthode de \"filtre\" ne peut fonctionner car tu ne sais pas comment est constitué le nom de domaine (microsoft.com ou zune.microsoft.com par exemple)
L'objet DirectorySearcher a une propriete SearchScope qui est par defaut à la valeur 'SubTree', c'est pour cela que la recherche te remonte tout.
Donc :
[code:1]
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objDomain
$objSearcher.Filter = '(&(objectCategory=organizationalUnit))'
$objSearcher.SearchScope = 'OneLevel'
$objSearcher.PageSize = 500
$objSearcher.SizeLimit = 1000
$objSearcher.FindAll()
[/code:1]
Le PageSize et SizeLimit, permet de gérer un trés grand nombre d'objet retourné par la requette LDAP.
Bien Cordialement,
Richard Lazaro.
PS :
@Versiona : Pense à utiliser le cmdlet Where-Object à la place d'une condition dans un Foreach-Object
[code:1]
$OUList | Where-Object{$_.Path.Split(\",\"«»).Count -le 3}
[/code:1]
A noter aussi, qu'il est préférable d'utiliser Foreach-Object à la palce de % pour que les \"nouveaux\" sur PowerShell puissent comprendre plus facilement ;]
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 12 ans 4 semaines #10133
par olivia
Réponse de olivia sur le sujet Re:Unité d'Organisation
Bonsoir,
merci, je vais tester !!!!
merci, je vais tester !!!!
Connexion ou Créer un compte pour participer à la conversation.
- olivia
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 75
- Remerciements reçus 0
il y a 12 ans 3 semaines #10170
par olivia
Réponse de olivia sur le sujet Re:Unité d'Organisation
Bonjour,
cela me retourne : System.DirectoryServices.SearchResult
cela me retourne : System.DirectoryServices.SearchResult
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 12 ans 3 semaines #10172
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Réponse de Arnaud Petitjean sur le sujet Re:Unité d'Organisation
Bonjour,
Le script suivant fonctionne très bien sur ma plateforme de test.
[code:1]
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objDomain
$objSearcher.Filter = '(&(objectCategory=organizationalUnit))'
$objSearcher.SearchScope = 'OneLevel'
$objSearcher.PageSize = 500
$objSearcher.SizeLimit = 1000
$objSearcher.FindAll()
[/code:1]
Il ne me retourne que les OU de 1er niveau grâce au $objSearcher.SearchScope = 'OneLevel'
Arnaud
Le script suivant fonctionne très bien sur ma plateforme de test.
[code:1]
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objDomain
$objSearcher.Filter = '(&(objectCategory=organizationalUnit))'
$objSearcher.SearchScope = 'OneLevel'
$objSearcher.PageSize = 500
$objSearcher.SizeLimit = 1000
$objSearcher.FindAll()
[/code:1]
Il ne me retourne que les OU de 1er niveau grâce au $objSearcher.SearchScope = 'OneLevel'
Arnaud
MVP PowerShell et créateur de ce magnifique forum

Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ou d'un conseil ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.051 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]Lister les OU de 1er niveau uniquement