Question Fonction Get-DnOU

Plus d'informations
il y a 14 ans 3 semaines #6289 par Mickael Hornung
Fonction Get-DnOU a été créé par Mickael Hornung
Bonjour à tous,
Voici une fonction qui permet de récupérer le DistinguishedName d'une OU. Il est cependant possible de la modifier facilement pour qu'elle puisse récupérer le DN de tout autre Objet dans l'Active Directory

[code:1]################################################################################################
# Get-DnOU.ps1 #
#(Auteur: Mickaël Hornung) #
# #
# Fonction qui permet de récupérer le DN d'une OU passée en paramètre. #
# Exemple d'utilisation: #
# Get-DnOU Utilisateurs // Renvoie le Dn de l'OU Utilisateurs si elle existe. #
# Get-DnOU a* // Renvoie le DN de toute les OU commençant par a (insensible à la casse) #
# Dans le cas où la fonction renvoie plusieurs résultats, un message d'avertissment apparaît #
# car le but de cette fonction et de rechercher une OU en particulier, de récupérer son DN #
# pour s'y connecter. #
# ex: $connection_ou = [ADSI] \"LDAP://mon_dc.domain.local/$(Get-DnOU -name Utilisateurs)\" #
################################################################################################

Function Global:Get-DnOU
{
param(
[string]$name = \"*\",
[string]$scope = \"Subtree\",
[int] $method = 1
)
$root = New-Object System.DirectoryServices.DirectoryEntry(\"\"«»)
$ldapQuery = \"(&(objectCategory=organizationalunit)(name=$name))\"
$query = New-object system.directoryservices.directorysearcher
$query.searchRoot = $root
$query.Filter = $ldapquery
$query.SearchScope = $scope
if ($method -eq 1)
{
$list_object = $query.findall()
if ($list_object.count -gt 1 -and $name -ne '*')
{
Write-Host
Write-Host \"Attention ! $($list_object.count) OU se nomment $($name)\" -foregroundcolor red
}
}
if ($method -eq 2)
{
$list_object = $query.findone()
}
return $list_object | Foreach-Object {$_.properties.distinguishedname}
}[/code:1]

La pièce jointe Get_DnOU.ps1 est absente ou indisponible

Pièces jointes :

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

Plus d'informations
il y a 14 ans 3 semaines #6291 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Fonction Get-DnOU
Salut,
j'ai deux remarques :
tu devrais utiliser un paramètre de type switch nommé All en lieu et place de [code:1][int] $method[/code:1]
Ainsi tu limites la mémorisation des noms de paramètres récurrents. De plus son usage correspond parfaitement à la méthode appelée.

La seconde concerne l'usage de la couleur rouge, pour un avertissement il est préférable d'utiliser Write-Warning (jaune). De cette manière tu restes cohérent avec les conventions implicites de l'équipe de dev de PowerShell.
Il faut éviter de voir rouge :P<br><br>Message édité par: Laurent Dardenne, à: 2/03/10 20:40

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 3 semaines #6297 par Mickael Hornung
Réponse de Mickael Hornung sur le sujet Re:Fonction Get-DnOU
Salut Laurent,
Merci pour tes remarques!
Effectivement, le paramètre de type switch correspond mieux :).
En ce qui concerne le Write-Warning je ne connaissait pas ;).
Je reposte le code modifié avec le fichier joint.
J'ai rajouté l'affichage de l'aide si le paramètre -help ou -h est indiqué. Si il y a d'autre remarque, ne pas hésiter :).

[code:1]################################################################################################
# Get-DnOU.ps1 #
#(Auteur: Mickaël Hornung) #
# #
# Fonction qui permet de récupérer le DN d'une OU passée en paramètre. #
# Exemple d'utilisation: #
# Get-DnOU Utilisateurs // Renvoie le Dn de l'OU Utilisateurs si elle existe. #
# Get-DnOU a* // Renvoie le DN de toute les OU commençant par a (insensible à la casse) #
# Dans le cas où la fonction renvoie plusieurs résultats, un message d'avertissment apparaît #
# car le but de cette fonction et de rechercher une OU en particulier, de récupérer son DN #
# pour s'y connecter. #
# ex: $connection_ou = [ADSI] \&quot;LDAP://mon_dc.domain.local/$(Get-DnOU -name Utilisateurs)\&quot; #
################################################################################################

Function Global:Get-DnOU ([string]$name = \&quot;*\&quot;, [string]$scope = \&quot;Subtree\&quot;, [switch]$all, [switch]$a, [switch]$help, [switch]$h)
{
if ($help -or $h)
{
Write-Host `n
Write-Host \&quot;Get-DnOU: retourne le DistinguishedName d'une unité d'organisation\&quot;
Write-Host \&quot;Usage: Get-DnOU &lt;param&gt;\&quot;
Write-Host \&quot;&lt;param&gt;:\&quot;
Write-Host \&quot; -name -Indiquer le nom exact d'une OU ou le début suivit du caractère `\&quot;*`\&quot;\&quot;
Write-Host \&quot; -all -Retourne toute les OU qui matchent le nom passé en paramètre.\&quot;
Write-Host \&quot; Si ce paramètre est ommis, la fonction s'arrête sur la première OU qui matche le nom.\&quot;
Write-Host \&quot; -help -Affiche l'aide\&quot;
Write-Host `n
return
}
$root = New-Object System.DirectoryServices.DirectoryEntry(\&quot;\&quot;«»)
$ldapQuery = \&quot;(&amp;(objectCategory=organizationalunit)(name=$name))\&quot;
$query = New-object system.directoryservices.directorysearcher
$query.searchRoot = $root
$query.Filter = $ldapquery
$query.SearchScope = $scope
if ($all -or $a)
{
$list_object = $query.findall()
if ($list_object.count -gt 1 -and $name -ne '*')
{
Write-Host `n
Write-Warning \&quot;$($list_object.count) OU commençent par `\&quot;$($name)`\&quot;\&quot;
}
}
else
{
$list_object = $query.findone()
}
return $list_object | Foreach-Object {$_.properties.distinguishedname}

}[/code:1]

La pièce jointe Get_DnOU-70504ba97890fdade942fc1728ad4c60.ps1 est absente ou indisponible

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

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