Question [Fonction] Récupération des membres d'un groupe AD
- Alan Pinard
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 77
- Remerciements reçus 0
il y a 16 ans 6 mois #5245
par Alan Pinard
Alan Pinard
Version A
[Fonction] Récupération des membres d'un groupe AD a été créé 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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 6 mois #5252
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Fonction] Récupération des membres d'un groupe AD
Salut,
quelque remarques :
dans le bloc Process tu peux aussi utiliser Write-Error :
quelque remarques :
dans le bloc Process tu peux aussi utiliser Write-Error :
Sinon j'ai un doute sur l'usage de ta fonction avec le pipeline.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.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Alan Pinard
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 77
- Remerciements reçus 0
il y a 16 ans 6 mois #5255
par Alan Pinard
Alan Pinard
Version A
Réponse de Alan Pinard sur le sujet Re:[Fonction] Récupération des membres d'un groupe AD
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 6 mois #5258
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[Fonction] Récupération des membres d'un groupe AD
Salut,
Versiona écrit:
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
Versiona écrit:
Pas du tout, comme tu utilises le bloc Process, par convention cela indique que tu utilises le pipeline.La remarque le pipeline est-ce parce que le paramètre $Group est un string?
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
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.093 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Contributions à la communauté
- [Fonction] Récupération des membres d'un groupe AD