none
Nombres de groupes et de membres par groupe RRS feed

  • Question

  • Bonjour,

    Je souhaiterai connaître les groupes AD qui possèdent 0 groupes et 0 membres.

    Si une personne a été amenée à faire ce genre de script, je veux bien des explications ou des tuyaux

    Cordialement 

    lundi 14 mars 2016 07:57

Réponses

  • l'erreur me surprend !

    essai cette correction :

    Get-ADGroup -Filter "name -like '*'" | foreach {
        if (-not (Get-ADGroupMember $_)) {
            Write-Output $_.name
            }
        } 

    pour comprendre pourquoi l'erreur me surprend, je te donne quelques explications  

    sur la première ligne, le get-adgroup récupère la liste des groupes dans l'AD. l'option Filter te permet de sélectionné que certains groupes, par exemple 'compta*' récupère les groupes qui commence par "compta", dans le script j'ai mis '*' pour avoir tous les groupes ! j'aurai pu ne pas mettre le filtre mais ça préparé le script pour faire des tests  sur un ou des groupes !

    la suite de la ligne '| foreach {' initie la boucle via un pipeline "|". Le pipeline envoie, un par un, les objets de l'instruction de gauche vers l'instruction de droite, ici le foreach.  foreach fait la même chose mais on ne peut pas l'enlevé !

    la ligne suivante, le 'if', test ce que renvoie Get-ADGroupMember . si il renvoie rien (le "-not") il exécute la ligne suivante, ou plutôt ce qu'il y a entre les crochets "{}". Get-ADGroupMember $_ renvoie la liste des membres du groupe contenu dans la variable "$_". "$_" est remplie par le pipeline ou comme ici le foreach. $_ contient donc un objet "Microsoft.ActiveDirectory.Management.ADGroup" contenant les informations d'un groupe. par exemple le name, le SamAccountName, le DistinguishedName, le SID.

    Get-ADGroupMember $_ ce trouve entre parenthèse pour que le -not ce face sur toutes l'instruction avec le $_ et pas que sur Get-ADGroupMember.

    pour finir write-output renvoie ce qui suit dans le pipeline. ici puisque qu'il n'y a pas de pipeline à la suite, c'est envoyé vers la console. $_.name est la propriété name de l'objet passé par le pipeline.

    .

    l'erreur "Get-ADGroupMember : Cannot find an object with identity" indique que Get-ADGroupMember ne trouve pas le groupe passé en paramètre, mais comme tu le vois dans le script le nom sort directement de l'AD. c'eest donc curieux !

    j'ai modifier le script pour qui reçoive l'objet ADGroup entier est pas que son nom.

    j'espère que tu aura plus le problème !

    • Marqué comme réponse MickaRnx jeudi 24 mars 2016 10:24
    mercredi 16 mars 2016 10:49

Toutes les réponses

  • salut mickarnx

    j'ai fait une reponse pour ce sujet ici

    il utilise le module AD il faut donc un domaine sous Windows serveur 2008r2 ou plus récent

    tu peut filtrer les groupes utilisant le filtre ou en rajoutant l'option -SearchBase "OU=MonOu,DC=domaine,DC=com" a la commande get-adgroup

    lundi 14 mars 2016 08:48
  • Merci pour votre réponse, cependant je n'arrive pas à récupérer les groupes qui ont 0 groupes et 0 membres. J'arrive juste à lister les groupes avec leurs nombres de membres/groupes
    • Modifié MickaRnx mardi 15 mars 2016 12:25
    mardi 15 mars 2016 12:25
  • je post le code modifier pour n'avoir que les groupes avec zéros membre :

    Get-ADGroup  -Filter "name -like '*'" | foreach {
        $nomgroupe = $_.name
        if (-not $(Get-ADGroupMember $nomgroupe)) {
            Write-Output "$nomgroupe"
            }
        } 
    
    

    il n'affiche que les groupes avec zéros membres dans l'onglet membre, il ne regarde pas les membres dans l'onglet "membres de" (memberof)

    si tu veux comprendre comment le code fonctionne, je peut te donné des explications. mais je pense qu'il est suffisamment  simple pour comprendre.

    • Proposé comme réponse 6ratgus mercredi 16 mars 2016 08:43
    mardi 15 mars 2016 14:38
  • Bonjour,

    Merci de ton script, il correspond bien à ma demande. je pense avoir compris le fonctionnement

    Mais si sa te dérange pas de donner des explications pour être sûr

    Cordialement

    mercredi 16 mars 2016 07:25
  • Cependant pour certains groupes, j'obtiens ce message d'erreur : 

    Get-ADGroupMember : Cannot find an object with identity

    mercredi 16 mars 2016 09:03
  • l'erreur me surprend !

    essai cette correction :

    Get-ADGroup -Filter "name -like '*'" | foreach {
        if (-not (Get-ADGroupMember $_)) {
            Write-Output $_.name
            }
        } 

    pour comprendre pourquoi l'erreur me surprend, je te donne quelques explications  

    sur la première ligne, le get-adgroup récupère la liste des groupes dans l'AD. l'option Filter te permet de sélectionné que certains groupes, par exemple 'compta*' récupère les groupes qui commence par "compta", dans le script j'ai mis '*' pour avoir tous les groupes ! j'aurai pu ne pas mettre le filtre mais ça préparé le script pour faire des tests  sur un ou des groupes !

    la suite de la ligne '| foreach {' initie la boucle via un pipeline "|". Le pipeline envoie, un par un, les objets de l'instruction de gauche vers l'instruction de droite, ici le foreach.  foreach fait la même chose mais on ne peut pas l'enlevé !

    la ligne suivante, le 'if', test ce que renvoie Get-ADGroupMember . si il renvoie rien (le "-not") il exécute la ligne suivante, ou plutôt ce qu'il y a entre les crochets "{}". Get-ADGroupMember $_ renvoie la liste des membres du groupe contenu dans la variable "$_". "$_" est remplie par le pipeline ou comme ici le foreach. $_ contient donc un objet "Microsoft.ActiveDirectory.Management.ADGroup" contenant les informations d'un groupe. par exemple le name, le SamAccountName, le DistinguishedName, le SID.

    Get-ADGroupMember $_ ce trouve entre parenthèse pour que le -not ce face sur toutes l'instruction avec le $_ et pas que sur Get-ADGroupMember.

    pour finir write-output renvoie ce qui suit dans le pipeline. ici puisque qu'il n'y a pas de pipeline à la suite, c'est envoyé vers la console. $_.name est la propriété name de l'objet passé par le pipeline.

    .

    l'erreur "Get-ADGroupMember : Cannot find an object with identity" indique que Get-ADGroupMember ne trouve pas le groupe passé en paramètre, mais comme tu le vois dans le script le nom sort directement de l'AD. c'eest donc curieux !

    j'ai modifier le script pour qui reçoive l'objet ADGroup entier est pas que son nom.

    j'espère que tu aura plus le problème !

    • Marqué comme réponse MickaRnx jeudi 24 mars 2016 10:24
    mercredi 16 mars 2016 10:49
  • Problème résolu, par le 1er script, les erreurs sont toujours présentes mais les groupes indiqués dans l'erreur sont tout de même lister.
    jeudi 17 mars 2016 08:02