Question [Fonction] Récupération des membres d'un groupe AD

Plus d'informations
il y a 16 ans 6 mois #5245 par Alan Pinard
Bonjour à tous,

Voici une fonction qui permet de récupérer les membres d'un groupe et de ces sousgroupe.

Ce n'est surement pas la première de ce genre mais je tenait à vous la faire partager au cas ou ça intéresserait quelqu'un:

[code:1]Function Get-VAGroupMembers {

#Fonction qui retourne tous les users d'un groupe et ces sousgroupes.
#La fonction retourne un array
#Utilisation: Get-VAGroupMembers -Group \"GRP_SHR_FINANCE\"
PARAM (
[String]$Group
)

BEGIN{
$strFilter = \"(&(objectCategory=group)(name=\" + $Group + \"«»))\"
$objAD = New-Object System.DirectoryServices.DirectoryEntry

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher -Argumentlist $objAD,$strFilter
$objGroup = $objSearcher.FindOne()
$DNGroup = ($objGroup.GetDirectoryEntry()).DistinguishedName

$objGroup = New-Object DirectoryServices.DirectoryEntry(\"LDAP://\" + $DNGroup)
$arrMembers = @()
}
PROCESS{
If ($objGroup.objectclass[1] -eq 'group') {

$objGroup.Member | ForEach {
$objMember = new-object DirectoryServices.DirectoryEntry(\"LDAP://\" + $_)
If ($objMember.ObjectClass[1] -eq 'group') {
$arrMembers += Get-VaGroupMembers -Group ($objMember.cn).ToString()
}
Else {
$arrMembers += ($objMember.SamAccountName).ToString()
}
}
}
Else {
Write-Host -ForegroundColor Red \"$Group n'est pas un groupe!\"
}
}
END{
Return $arrMembers
}
}
[/code:1]

Alan Pinard
Version A

La pièce jointe Get_VaGroupMembers.txt est absente ou indisponible


Alan Pinard
Version A
Pièces jointes :

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

Plus d'informations
il y a 16 ans 6 mois #5252 par Laurent Dardenne
Salut,
quelque remarques :
dans le bloc Process tu peux aussi utiliser Write-Error :

Your cmdlet should call the WriteError method to report non-terminating errors when the cmdlet can continue processing the input objects. Both methods provide an error record that the host application can use to investigate the cause of the error.

Sinon j'ai un doute sur l'usage de ta fonction avec le pipeline.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 6 mois #5255 par Alan Pinard
Bonjour Laurent,

Merci pour les commentaires. La remarque le pipeline est-ce parce que le paramètre $Group est un string?

Merci
Alan Pinard
Version A

Alan Pinard
Version A

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

Plus d'informations
il y a 16 ans 6 mois #5258 par Laurent Dardenne
Salut,
Versiona écrit:

La remarque le pipeline est-ce parce que le paramètre $Group est un string?

Pas du tout, comme tu utilises le bloc Process, par convention cela indique que tu utilises le pipeline.
mais dans ton script seul le bloc End envoi des données,je pense que ceci ne fonctionera pas :
[code:1]
\"GRP_SHR_FINANCE\",\"GRP_SHR_COMPTA\"|Get-VAGroupMembers| Foreach-Object { FaitQuelQuechose avec $_}
[/code:1]
Enfin cela fonctionnera, mais le dernier segment récupérera UN tableau contenant tous les membres de tous les groupes.

Si l'usage du pipeline n'est pas prévu tu ne devrais pas, à mon avis, utiliser le bloc Process même si celui-ci est appelé lors d'un appel \"en dehors du pipeline\":
[code:1]
Get-VAGroupMembers \"GRP_SHR_FINANCE\"
[/code:1]
Soit tu ne déclares pas de bloc, implicitement c'est le bloc End, soit tu utilises une autre approche pour prendre en compte le pipeline.

Ta manière de coder la fonction n'est pas conventionnel et s'il y a une astuce je ne l'ai pas comprise :dry:

Tutoriels PowerShell

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

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