IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Dépasser les 5000 members avec Get-ADGroupMember [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut Dépasser les 5000 members avec Get-ADGroupMember
    Bonjour

    passer au post #2 (je garde le 1 pour l'historique)

    j'utilise l'instruction Get-ADUser pour explorer l'AD. Si en test, ça fonctionne bien, quand on passe en prod, on tombe sur une limite de 5000 membres (y en a 6 ou 7000). Comment peut-on bypasser cette limite ?

    Mon code est de type :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        foreach($domain in $domains)
        {
            $member =Get-ADUser -filter "((EmployeeID -like '$columnvalue') -OR (name -like '$columnvalue'))  " -Server $domain -Properties * #le properties * est important
     
            if($member)
            {
             ...

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonsoir, j'ai modifié le titre de la discussion car mon problème porte plus précisément sur une limitation de la cmdlet Get-ADGroupMember.
    Et la ligne de code qui coince est :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Get-ADGroupMember -Identity $Group -server gad.schneider-electric.com -recursive |%{
    	$group=$_
    get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
    } | Export-csv -path $OutputFile

    Quelqu'un a-t-il une piste pour exécuter ça sur des groupes de plus de 5000 membres ? (je ne parviens pas à utiliser les pages trouvées sur internet données par https://www.google.fr/search?source=hp&ei=3mQPWtDSHpLOsAeG1qDQBQ&q=get+ad+group+member+size+limit+exceeded&oq=get+ad+group+member+size+limit+exceeded&gs_l=psy-ab.3..0i10i19k1.8245.8245.0.10564.1.1.0.0.0.0.189.189.0j1.1.0....0...1.1.64.psy-ab..0.1.187....0.OLltW8qcs (google : get ad group member size limit exceeded)

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Voici un essai infructueux en essayant d'exploiter https://stackoverflow.com/questions/...t-was-exceeded :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $Group = ((Get-ADGroup -Filter {name -eq $param} -Server "gad.schneider-electric.com").sAMAccountName)
    ...
    Get-ADGroup $Group -Properties Member |
        Select-Object -Expand Member |
        Get-ADUser -Property Name, DisplayName  | Export-csv -path $OutputFile

    message d'erreur :
    Get-ADGroup : Impossible de trouver un objet avec l’identité «GAD-SU-NextGenPDM_DEV» sous: etc
    Avez-vous une idée ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    salut Laurent

    comment va tu ?

    pour ton soucis c'est une limite Microsoft pour toute requête LDAP dans l'AD !!

    tu doit pour la dépassé faire des modifs dans l'ad, mais de mémoire, tu n'a pas les droits pour ces modification dans l'AD

    tu doit donc rusé
    il me semble que l'on en a déjà parlé cette été
    tu peut par exemple faire une requêté pour avoir la moitié des groupes par exemple
    il faut regarder les nom des groupes pour trouvé un filtre qui fonctionne


    pour ton erreur tu la déjà eu dans de précèdent message
    toujours le même problème de filtre ou/et de nom de serveur a interroger !!

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour 6ratgus (Philippe je crois me souvenir ?)

    si je vais bien : les pieds dans la neige (ce qui ne doit pas être ton cas !). Sauf que le rhume m'a empêché d'en profiter...

    J'attendais avec impatience (vilain défaut crois-je aussi me souvenir) une réponse.
    Tu te souviens que j'ai pas les droits de modifier l'AD: exact. Donc OK pour la ruse.

    Un filtre qui irait bien serait de pouvoir trier les membres s'ils sont rattachés ou non au serveur "nam" (il doit y en avoir plusieurs milliers) sauf que je sais pas si cet info est présente dans un paramètre...ni dans ce cas comment faire un filtre qui dirait filter {nom_param contient "nam"}

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    OK pour filtrer mais sur quel paramètre et comment ?

    Mon code à l'heure actuelle est :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Get-ADGroupMember -Identity $Group -server gad.schneider-electric.com -recursive |%{
    	$group=$_
    get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
    } | Export-csv -path $OutputFile

    J'ai tenté de mettre un filtre sur get-aduser (la cmdlet qui accepte un filtre), mais
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Get-ADGroupMember -Identity $Group -server gad.schneider-electric.com -recursive |%{
    	$group=$_
    get-aduser $_ -filter{name -like "SESA1*"} -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
    } | Export-csv -path $OutputFile
    donne
    Get-ADUser : A positional parameter cannot be found that accepts argument
    'CN=SESAetc30182,OU=Users,OU=TN-Smyrna-USSMY00001,OU=Sites,OU=US,OU=Countries,DC=nam,DC=gad,DC=schneider-electric,DC=com'.
    At
    Donc c'est pas bon...

  7. #7
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    salut Laurent

    désolé je suis pas trop dispo cette semaine,
    notre entreprise est en plein déménagement,
    ça m'occupe donc pas mal

    dommage pour le rhume, moi même j'en sort d'un gros qui m'a pris les bronche
    alors soigne toi bien !!

    pour ton dernier code ceci ne peut pas fonctionné :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    get-aduser $_ -filter{name -like "SESA1*"}
    il ne peut pas y avoir un nom précis contenu dans $_ et un filtre (sur name ou autre)
    filtre implique que l'on ne connais pas le nom de l'utilisateur !!
    ce code devrait être bon :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    get-aduser -filter{name -like "SESA1*"} -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | Select Name,GivenName,SurName,Employeeid,Mail,Enabled | Export-csv -path $OutputFile
    ou peut etre ceci :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Get-ADGroupMember -Identity $Group -server gad.schneider-electric.com -recursive | foreach {
    	$group = $_
        get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
        } | Export-csv -path $OutputFile

    alors J'ai trouvé ce paramètre pour get-aduser et get-adgroup ResultSetSize, il semble que cela permette de recevoir plus de 5000 objet de l'AD si tu le met a $null
    mais il ne fonctionne pas pour get-adgroupmember :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    get-aduser -filter{name -like "*"} -ResultSetSize $null

    pour le filtre comme je te l'ai dis il depend du nommage de des groupes de l'AD, je peut donc pas beaucoup t'aidé

    mais j'ai une question veux tu :
    - la liste des utilisateurs d'un groupe ?
    - la liste des groupes ?
    - la liste des utilisateurs de ton AD ?

    tes différents scripts ne donne pas une situation clair sur ce point !

    je crois que tu est meilleur sur les requêtes SQL, pense a une solution dans ce sens

    dis moi !!

  8. #8
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Je te remercie pour ta réponse mais ne testerai que demain.

    Juste une réponse à ta question : ce que je veux obtenir, c'est pour un groupe donné, pour chacun de ses utilisateurs, plusieurs infos (comme nom, site, mail...)

    Et sinon, que peut-on faire avec SQL (que je connais en effet) ?

  9. #9
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Ca y est j'ai fait le test. Ce code a l'air de marcher :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Get-ADGroupMember -Identity $Group -server gad.schneider-electric.com -recursive |%{
    	$group=$_
    get-aduser  -filter{name -like "SESA1*"} -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
    } | Export-csv -path $OutputFile
    sauf que sur le groupe de plus de 5000 users :
    Get-ADGroupMember : Dépassement de la limite de taille pour cette requête
    et le filtre porte sur get-aduser, pas sur Get-ADGroupMember. Tu as une idée ?

  10. #10
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Petite idée pour contourner ce problème : d'abord faire une copie du groupe à analyser et une copie filtrée pour réduire le nombre de membres à moins de 5000. J'ai repris le script qu'on avait mis au point ensemble (6ratgus) mais le filtre ne semble pas fonctionner (l'idée est de ne retenir que les users avec un certain nom et je filtre sur sAMAccountName) :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    $ErrorActionPreference='SilentlyContinue' #to not display the error messages
     $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #path of the folder where is located the current script
     
     # textbox to select the group to be copied (the script of the textbox is common and in the file textbox.ps1)
     
    $text="Please enter the name of the group to be copied:"
    . "$scriptPath\textbox.ps1"
    $groupsource=$objTextBox.Text #name of the source group
     
    # textbox to select the group to be feeded
     
    $text="Please enter the name of the group to be feeded:"
    . "$scriptPath\textbox.ps1"
    $groupdest=$objTextBox.Text  #name of the destinatory GAD-SU-NextGenPDM_NonPROD
     
    #one has to use for example sAMAccountName instead of name for any AD cmdlet
    $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName)
    $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName)
    $DebugPreference='SilentlyContinue'
    if (($samgrsource -eq $null) -OR ($samgrdest -eq $null)) { Write-Host "unknown name for source or destinatory file";return;}
    if ($samgrsource -eq $groupdest) {Write-Host "source and destinatory files are identical";return;}
     
    #To clean the group to be feeded 
    try {
        Set-ADGroup  -Identity $samgrdest -clear member -Server "gad.schneider-electric.com" 
    }
    catch {Write-Host "unknown name for destinatory group";return} 
     
    try { 
    Get-ADGroupMember -Identity $samgrsource  -Server "gad.schneider-electric.com"| foreach {
        Write-Host $_.sAMAccountName"`t  " -NoNewline -ForegroundColor Green
        $u = $_ #the switch instruction generates aldo a $_ variable, so memorization
        #to do a search in the right domain, first locate in DistinguishedName what is this domain
        switch ($_.DistinguishedName) {
            {($_).contains("DC=gad,DC=schneider-electric,DC=com")} {
                $user = get-aduser -filter {sAMAccountName -like "SESA1%" -and sAMAccountName -eq $u.sAMAccountName -and Enabled -eq $True} -Server "gad.schneider-electric.com" 
                }
            {($_).contains("DC=apa,DC=gad,DC=schneider-electric,DC=com")} {
                $user = get-aduser -filter {sAMAccountName -like "SESA1%" -and sAMAccountName -eq $u.sAMAccountName -and Enabled -eq $True} -Server "apa.gad.schneider-electric.com"
                }
            {($_).contains("DC=gmea,DC=gad,DC=schneider-electric,DC=com")} {
                $user = get-aduser -filter {sAMAccountName -like "SESA1%" -and sAMAccountName -eq $u.sAMAccountName -and Enabled -eq $True} -Server "gmea.gad.schneider-electric.com"
                }
           {($_).contains("DC=eur,DC=gad,DC=schneider-electric,DC=com")} {
                $user = get-aduser -filter {sAMAccountName -like "SESA1%" -and sAMAccountName -eq $u.sAMAccountName -and Enabled -eq $True} -Server "eur.gad.schneider-electric.com"
                }
           {($_).contains("DC=nam,DC=gad,DC=schneider-electric,DC=com")} {
                $user = get-aduser -filter {sAMAccountName -like "SESA1%" -and sAMAccountName -eq $u.sAMAccountName -and Enabled -eq $True} -Server "nam.gad.schneider-electric.com"
     
                }
            }
        if ($user) {
        #if the domain has been found, some displays+add the user in the new group
            Write-Host $user.Enabled"`t  "  -NoNewline -ForegroundColor Red
            Write-Host "sAMAccountName" $user.sAMAccountName"`t  " -NoNewline -ForegroundColor White
            Write-Host ".Name" $user.Name -NoNewline -ForegroundColor Yellow
            Add-ADGroupMember -Identity $samgrdest -members $u -Server "gad.schneider-electric.com"
            }
        Write-Host ""
        }}
    catch {Write-Host "unknown name for source group"}

  11. #11
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    Salut Laurent

    désolé mais comme je te l'avais dis je sui en déménagement de l'entreprise pour qui je travail et ça me laisse peu de temps pour le forum ces jours ci !

    après quelques recherches, j'ai trouver une solution qui contourne la limitation sans bidouille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $groupsource = "nom_du_groupe_avec_plus_de_5000_utilisateurs"
    $users = Get-ADGroup -Identity $groupsource  -Server "gad.schneider-electric.com" -Properties Member | Select-Object -ExpandProperty Member | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user"}  | foreach {
            get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | where {$_.Enabled -eq $True} | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
            }
        }
    $users.count
    si le résultat plus de 5 000 alors c'est bon

    j'ai essayer de retranscrire la solution dans le dernier script que tu a posté
    a toi de vous si c''est bon !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    $ErrorActionPreference='SilentlyContinue' #to not display the error messages
     $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #path of the folder where is located the current script
     
     # textbox to select the group to be copied (the script of the textbox is common and in the file textbox.ps1)
     
    $text="Please enter the name of the group to be copied:"
    . "$scriptPath\textbox.ps1"
    $groupsource=$objTextBox.Text #name of the source group
     
    # textbox to select the group to be feeded
     
    $text="Please enter the name of the group to be feeded:"
    . "$scriptPath\textbox.ps1"
    $groupdest=$objTextBox.Text  #name of the destinatory GAD-SU-NextGenPDM_NonPROD
     
    #one has to use for example sAMAccountName instead of name for any AD cmdlet
    $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName)
    $samgrdest = ((Get-ADGroup -Filter {name -eq $groupdest} -Server "gad.schneider-electric.com").sAMAccountName)
    $DebugPreference='SilentlyContinue'
    if (($samgrsource -eq $null) -OR ($samgrdest -eq $null)) { Write-Host "unknown name for source or destinatory file";return;}
    if ($samgrsource -eq $groupdest) {Write-Host "source and destinatory files are identical";return;}
     
    #To clean the group to be feeded 
    try {
        Set-ADGroup  -Identity $samgrdest -clear member -Server "gad.schneider-electric.com" 
    }
    catch {Write-Host "unknown name for destinatory group";return} 
     
    try { 
    Get-ADGroup -Identity $samgrsource  -Server "gad.schneider-electric.com" -Properties Member | Select-Object -ExpandProperty Member | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user"}  | foreach {
            Write-Host $_.sAMAccountName"`t  " -NoNewline -ForegroundColor Green
            $user = get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | where {$_.Enabled -eq $True} | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
            if ($user) {
            #if the domain has been found, some displays+add the user in the new group
                Write-Host $user.Enabled"`t  "  -NoNewline -ForegroundColor Red
                Write-Host "sAMAccountName" $user.sAMAccountName"`t  " -NoNewline -ForegroundColor White
                Write-Host ".Name" $user.Name -NoNewline -ForegroundColor Yellow
                Add-ADGroupMember -Identity $samgrdest -members $u -Server "gad.schneider-electric.com"
                }
            Write-Host ""
            }
        }
        
        }
    catch {Write-Host "unknown name for source group"}
    bon courage pour la suite

  12. #12
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour 6ratgus,

    je te remercie de te pencher sur mon problème malgré ton manque de dispo. Néanmoins le second script ne fonctionne pas (il se termine par l'exécution du catch ligne 46), donc j'ai voulu tester le 1er script et pour l'appeler sur des groupes qui existent, j'ai rajouté un champ de texte qui demande le nom du groupe :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ErrorActionPreference='SilentlyContinue' #to not display the error messages
    $text="Please enter the name of the group to be analyzed:"
    $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #path of the folder where is located the current script
    . "$scriptPath\textbox.ps1"
    $groupsource=$objTextBox.Text #name of the source group;
    $groupsource
    $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName)
    $users = Get-ADGroup -Identity $groupsource  -Server "gad.schneider-electric.com" -Properties Member | Select-Object -ExpandProperty Member | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user"}  | foreach {
            get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled | where {$_.Enabled -eq $True} | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
            }
        }
    $users.count
    Le souci est que le nombre d'utilisateurs pour des groupes non vides est 0
    Par contre, saurais-tu faire marcher le script que j'ai donné au post #10 ?

  13. #13
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    Par contre, saurais-tu faire marcher le script que j'ai donné au post #10 ?
    pour faire fonctionner ce script il faut résoudre le problème de la limite de 5 000 objets
    car le nombre de membres que renvoie la fonction Get-ADGroupMember ne peut être changer !

    Le souci est que le nombre d'utilisateurs pour des groupes non vides est 0
    j'ai pas ce problème sur mon ad
    on va donc regarder par étape,
    j'ai modifier le script pour voir ou ça bloque
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ErrorActionPreference='SilentlyContinue' #to not display the error messages
    $text="Please enter the name of the group to be analyzed:"
    $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #path of the folder where is located the current script
    . "$scriptPath\textbox.ps1"
    $groupsource = $objTextBox.Text #name of the source group;
    $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName)
    $members = Get-ADGroup -Identity $samgrsource  -Properties Member -Server "gad.schneider-electric.com" | Select-Object -ExpandProperty Member
    Write-Host "nombre de membres dans le groupe : $($members.count)" -ForegroundColor Yellow
    $users = $members | foreach {
        Get-ADObject $_ -Server "gad.schneider-electric.com" | where {$_.ObjectClass -eq "user"}  | foreach {
            get-aduser $_ -Properties Name,GivenName,SurName,Employeeid,Mail,Enabled -Server "gad.schneider-electric.com" | where {$_.Enabled -eq $True} | Select Name,GivenName,SurName,Employeeid,Mail,Enabled
            }
        } 
    Write-Host "nombre de d'utilisateurs actif dans le groupe : $($users.count)" -ForegroundColor Yellow
    attention on ne prend que les utilisateurs directement dans le groupe
    pas les groupes et utilisateurs de ces sous groupes
    en clair il n'y a pas de récursivité

  14. #14
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Je viens seulement de pouvoir tester ton script (d'abord repas puis réunion). Sur un groupe de 2316 users :
    nombre de membres dans le groupe : 2316
    nombre de d'utilisateurs actif dans le groupe : 0
    (1e réponse quasi immédiate et la seconde au moins 3 minutes)

  15. #15
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    je sais pas si tu a fais attention aux derniere ligne de mon precedent message :
    le script ne prend que les utilisateurs directement dans le groupe
    pas les groupes et utilisateurs de ces sous groupes
    en clair il n'y a pas de récursivité

    sinon étape suivante, peut tu tester ceci :

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $ErrorActionPreference='SilentlyContinue' #to not display the error messages
    $text="Please enter the name of the group to be analyzed:"
    $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #path of the folder where is located the current script
    . "$scriptPath\textbox.ps1"
    $groupsource = $objTextBox.Text #name of the source group;
    $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName)
    $members = Get-ADGroup -Identity $samgrsource  -Properties Member -Server "gad.schneider-electric.com" | Select-Object -ExpandProperty Member
    Write-Host "nombre de membres dans le groupe : $($members.count)" -ForegroundColor Yellow
    $obj = $members | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user"}  
        } 
    Write-Host "nombre de d'utilisateurs dans le groupe : $($obj.count)" -ForegroundColor Yellow
    $obj = $members | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user" -and $_.Enabled -eq $True}  
        } 
    Write-Host "nombre de d'utilisateurs actif dans le groupe : $($obj.count)" -ForegroundColor Yellow
    $obj = $members | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "group"}  
        } 
    Write-Host "nombre de d'utilisateurs groupes dans le groupe : $($obj.count)" -ForegroundColor Yellow

  16. #16
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Salut 6ratgus
    J'ai bien vu ton post dès hier soir mais un pb de pc (du boulot) m'empêche de faire ce test avant mardi (au mieux). Je te tiens au courant

  17. #17
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Je viens de tester ton script, et :

    nombre de membres dans le groupe : 2316
    nombre de d'utilisateurs dans le groupe : 787
    nombre de d'utilisateurs actif dans le groupe : 0
    nombre de d'utilisateurs groupes dans le groupe : 0
    Peux-tu m'expliquer ce que ça veut dire ?

  18. #18
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    Peux-tu m'expliquer ce que ça veut dire ?
    ça veux dire que je me suis tromper de script (erreur de copier/coller) désolé

    voici le bon script :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $ErrorActionPreference='SilentlyContinue' #to not display the error messages
    $text="Please enter the name of the group to be analyzed:"
    $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition #path of the folder where is located the current script
    . "$scriptPath\textbox.ps1"
    $groupsource = $objTextBox.Text #name of the source group;
    $samgrsource = ((Get-ADGroup -Filter {name -eq $groupsource} -Server "gad.schneider-electric.com").sAMAccountName)
    $members = Get-ADGroup -Identity $samgrsource  -Properties Member -Server "gad.schneider-electric.com" | Select-Object -ExpandProperty Member
    Write-Host "nombre de membres dans le groupe : $($members.count)" -ForegroundColor Yellow
    $obj = [System.Object[]]($members | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "group"}
        }) 
    Write-Host "nombre de groupes dans le groupe : $($obj.count)" -ForegroundColor Yellow
    $obj = [System.Object[]]($members | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user"} 
        })
    Write-Host "nombre d'utilisateurs dans le groupe : $($obj.count)" -ForegroundColor Yellow
    $obj = [System.Object[]]($members | foreach {
        Get-ADObject $_ | where {$_.ObjectClass -eq "user"} | get-aduser | where {$_.Enabled -eq $True}
        })
    Write-Host "nombre d'utilisateurs actif dans le groupe : $($obj.count)" -ForegroundColor Yellow

  19. #19
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Et voilà :
    ombre de membres dans le groupe : 2316
    nombre de groupes dans le groupe : 0
    nombre d'utilisateurs dans le groupe : 787
    nombre d'utilisateurs actif dans le groupe : 757

  20. #20
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 281
    Par défaut
    il y a donc 2316 membres, loin des 5 000 du début, ouf

    tu a donc 757 utilisateurs a transférer dans le nouveau groupe
    attention je ne parle pas des utilisateurs dans les sous-groupes !
    sans doute 1529 groupes dont je ne sais pas ce que tu doit en faire !!

    je ne sais pas pourquoi tu a zéros groupes, peut être qu'il faut mettre -Server "gad.schneider-electric.com" pour cette partie
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $obj = [System.Object[]]($members | foreach {
        Get-ADObject $_  -Server "gad.schneider-electric.com" | where {$_.ObjectClass -eq "group"}
        }) 
    Write-Host "nombre de groupes dans le groupe : $($obj.count)" -ForegroundColor Yellow

    tu a des messages d'erreur ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. un outil en ligne pour faire des graphiques avec les données fournies en GET ?
    Par clavier12AZQSWX dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 26/05/2014, 09h42
  2. Réponses: 0
    Dernier message: 04/07/2012, 15h47
  3. Récupérer les données par ordre alphabétique avec GET
    Par thebarbarius dans le forum Langage
    Réponses: 4
    Dernier message: 04/03/2010, 14h42
  4. Modifier et récuperer les données avec get et set
    Par rimbaut dans le forum Langage
    Réponses: 2
    Dernier message: 14/02/2010, 16h45
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo