Question AD : Lister OU d'1 user - travail/chaine2caractère

Plus d'informations
il y a 11 ans 8 mois #12327 par CGR
Bonjour à tous,

Comme l'indique la section du forum, je suis débutant en powershell donc je vais essayer de m'exprimer clairement :huh: :
Dans le cadre d'une migration d'AD, je cherche à récupérer les OU dont un user fait partie dans l'AD source afin de créer des groupes du même nom dans l'AD cible.

Pour l'instant, j'arrive à lister mes utilisateurs et récupérer le DN(distinguished name) de la forme :
[code:1]CN=user29 1,OU=Reseau,OU=29,DC=test,DC=gbr[/code:1]
Si je fais un split :
[code:1]$T1=$objItem.distinguishedname -split(\",\"«»)[0]
$T1[/code:1]
J'obtiens ceci :
[code:1]CN=user29 1
OU=Reseau
OU=29
DC=test
DC=gbr[/code:1]
Or je souhaiterai juste obtenir les lignes concernant les OU et les mettre dans des variables ou dans un tableau.

J'imagine que 2 solutions sont possibles :
- réussir à supprimer les lignes qui ne m'intéresse pas (CN=...,DC=....)
ou
- directement travailler sur la chaine de caractère du Distinguished Name et récupérer les valeurs entre \"OU=\" et \",\".

Pourriez-vous m'aider? m'indiquer quelle est la meilleure méthode?
En vous remerciant par avance :)

Ci-dessous, mon script pour l'instant :
[code:1]$strFilter = \"(objectCategory=User)\"
# on peut rajouter $strFilter = \"(&(objectCategory=User)(Department=Finance)(jobTitle=Accountant))\"

$ObjDomain = New-Object System.DirectoryServices.DirectoryEntry (\"LDAP://dc=test,dc=gbr\"«»)
# création d'une instance de la System.DirectoryServices.DirectoryEntry classe
# En termes plus concrets, ce que nous faisons est d'identifier l'emplacement Active Directory où nous voulons commencer la recherche

# $ObjOU = New-Object System.DirectoryServices.DirectoryEntry (\"LDAP://OU=Finances,dc=test,dc=gbr\"«»)
# cela signifie que notre recherche va commencer dans l'unité Finances plutôt que la racine du domaine

$ObjSearcher = New-Object System.DirectoryServices.DirectorySearcher
# créer une instance de la System.DirectoryServices.DirectorySearcher classe

$ObjSearcher.SearchRoot = $objDomain
# Le searchRoot indique ou DirectorySeacher ou commencer à chercher

$ObjSearcher.PageSize = 1000
$ObjSearcher.Filter = $strFilter
$ObjSearcher.SearchScope = \"Subtree\"
# pour chercher dans la sous-arborescence

$colProplist = \"name\" , \"DN\"
# \"name\" , \"jobTitle\", \"telephoneNumber\"
#création d'un tableau qui contient les attributs à chercher

$colResults = $objSearcher.FindAll()
foreach ($objResult in $colResults)
# {
# $objResult.Properties | % {$_.propertynames}
# }
{$objItem = $objResult.Properties
\"Name = \" + $objItem.name
\"AD Path = \" + $objItem.distinguishedname
$T1=$objItem.distinguishedname -split(\",\"«»)[0]
$T1
Write-Host
}
[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #12328 par Richard Lazaro
Bonsoir,

D'aprés ce que je comprends, tu veux récupérer l'arborescence de l'AD source pour la recréer de l'autre côté ?

Pour info, pourquoi ne pas passer par des méthodes \"standard\" ? Pourquoi utiliser PowerShell ?

Sinon, dans ton script tu parles de recréer des groupes es ce normal ?

Pour récupérer des valeurs dans ton DN, on peut utiliser des regexps. Je suis en train de regarder cela.

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.

Plus d'informations
il y a 11 ans 8 mois #12391 par CGR
Bonjour,

Merci pour votre réponse, j'ai mis un peu de temps à répondre, vacances... :)
Qu'appelez vous méthodes standards?
Notre AD ayant été fortement \"gérée\" par des OU, nous souhaitons repartir sur une AD \"gérée\" par des groupes d'utilisateurs.
Aussi, lors de la migration ADMT, je veux créer un groupe qui portera le nom de l'OU ou était l'utilisateur et le placer dedans.

Pour le moment, ma question est juste de découper une chaine de caractère. J'ai ceci :
CN=user29 1,OU=Reseau,OU=29,DC=test,DC=gbr
Si je fai un plit sur la , j'ai ceci :
CN=user29 1
OU=Reseau
OU=29
DC=test
DC=gbr

et je voudrais récupérer uniquement 2 variables :
$1 OU=Réseau
$2 OU=29

En vous remerciant par avance

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #12395 par Arnaud Petitjean
Salut CGR15121,

Pour extraire de ta chaine de caractere les \"OU\" tu peux ecrire ceci:
[code:1]
$str = 'CN=user29 1,OU=Reseau,OU=29,DC=test,DC=gbr'
($str -split ',') -like \"OU=*\"
[/code:1]

Resultat:
[code:1]
OU=Reseau
OU=29
[/code:1]

Et comme le resultat est un tableau, si tu affectes le resultat a une variable, tu accedes a la premiere valeur a l'indice zero et ainsi de suite.

Exemple:

[code:1]
$str = 'CN=user29 1,OU=Reseau,OU=29,DC=test,DC=gbr'
$result = ($str -split ',') -like \"OU=*\"

PS > $result[0]
OU=Reseau
PS > $result[1]
OU=29
[/code:1]

En esperant que ca t'aide...

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 ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #12396 par Richard Lazaro
Ha j'ai oublié de répondre à ce poste ...
Je suis d'accord avec Arnaud mais un point me pose problème.

Il est en effet possible d'avoir des virgules dans le nom d'OU ou autre ce qui va bloquer le bon fonctionnement de cette méthode.

Bien Cordialement,
Richard Lazaro.

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.

Plus d'informations
il y a 11 ans 8 mois #12400 par Arnaud Petitjean
Hehe, salut !

Il est en effet possible d'avoir des virgules dans le nom d'OU ou autre ce qui va bloquer le bon fonctionnement de cette méthode.


Good catch Richard! Quelle bien mauvaise idee de nommer des OU avec des virgules !?

Comment contourner le probleme ?

Je ne vois que les expressions regulieres pour nous sortir de cette orniere. Avis aux amateurs... :laugh:

Arnaud<br><br>Message édité par: Arnaud, à: 17/07/12 18:42

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 ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.090 secondes
Propulsé par Kunena