none
CSV Output von Gruppen, Anzahl der Member und Workaround für Gruppen als Member RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte eine Liste von Gruppen aus dem AD abfragen (fangen alle mit xyz-ctx an).

    Diese Liste von Gruppen soll in eine Tabelle geschrieben werden, mit Anzahl dem Namen der Gruppe, der Anzahl der Member und wovon diese Gruppe selbst Member ist.

    Wie ich zum Beispiel die Anzahl herausfinden kann ist kein Problem, jedoch sind Member,die selbst eine Gruppe sind, ein Problem, da diese selbst als Array abgespeichert werden und dann in meinem CSV Output als folgendes angezeigt wird: Microsoft.ActiveDirectory.Management.AdPropertyValueColletion
     Dasselbe Problem hab ich bei den MemberOf.

    Mein Ansatz bisher war die Liste der Groups in durch eine Foreach Liste zu schicken mir die Werte ($Anzahl, $MemberOf, $GroupName) in ein Objekt zu schreiben:

    $Obj=  New-ObjectPsobject-Property@{

    Name=$Name

    Anzahl=$Anzahl

    MemberOf=$MemberOf   

    $array.Add($Obj)

    $Array wurde vorher über

    $array=New-ObjectSystem.Collections.Generic.List[object]

    deklariert.  Nur dabei tritt oben beschriebenes Verhalten auf.

     



    Freitag, 15. Februar 2019 13:48

Antworten

  • Hier schon mal ein Anfang ... ich hoffe, ich hab die Anforderung richtig verstanden ....

    $Searchbase = 'hier den distinguished name der OU eintragen'
    Get-ADGroup -Filter "Name -like 'xyw-ctx*' -or Name -like 'xyz-ctx*'" -SearchBase $Searchbase -Properties MemberOf | 
        ForEach-Object {
            $Members = Get-ADGroupMember -Identity $_
            [PSCustomObject]@{
                Name = $_.Name
                UserMembersCount = @($Members | Where-Object -Property objectClass -EQ user).count
                GroupMemberSCount = @($Members | Where-Object -Property objectClass -EQ group).count
                MemberOf = @($_.MemberOf) -join ','
            }
        }

    Edit: ... so .. MemberOf noch hinzugefügt ... passt so?  ;-)

    Edit2:  ... so  ... Filter noch angepasst ... so sollte's aber passen.  ;-) ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''





    • Bearbeitet BOfH-666 Freitag, 15. Februar 2019 15:04
    • Als Antwort markiert Ceddiho Freitag, 15. Februar 2019 15:11
    • Tag als Antwort aufgehoben Ceddiho Freitag, 15. Februar 2019 15:12
    • Als Antwort markiert Ceddiho Freitag, 15. Februar 2019 15:12
    Freitag, 15. Februar 2019 14:49

Alle Antworten

  • Bitte keinen farbigen Code posten. Der ist ziemlich schlecht lesbar. Es gibt extra für Code eine Option auf der Symolleiste im Post-Editor.

    Magst Du uns den ganzen Code zeigen? Woher kommen denn $Name, $Anzahl und $MemberOf z.B.?  ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 15. Februar 2019 14:14
  • Wie wäre is mit

    $MemberOf.GetType() -eq [String]

    zu prüfen, bevor du den Eintrag dem Array hinzufügst?

    https://www.daniellittle.xyz/powershell-typeof/

    Freitag, 15. Februar 2019 14:41
  • $array = New-Object System.Collections.Generic.List[object]
    
    $Group1 = Get-ADGroup -filter  {name -like "xyw-ctx*"} -Properties * | select Name
    $group2 = Get-ADGroup -filter  {name -like "xyz-ctx*"} -Properties * | select Name
    
    foreach ($group in $Group1)
    {
        $groupObject = get-adgroup $group.Name -Properties *
        $anzahl = $groupObject.member.count
        $MemberOf = $groupObject.MemberOf
        $Name = $groupObject.Name         
         
        $Obj =  New-Object Psobject -Property @{
    	Name = $Name
    	Anzahl = $anzahl
    	MemberOf = $MemberOf
        $array.Add($Obj)
    }
    foreach ($group in $Group2)
    {
        $groupObject = get-adgroup $group.Name -Properties *
        $anzahl = $groupObject.member.count
        $MemberOf = $groupObject.MemberOf
        $Name = $groupObject.Name            
         
        $Obj =  New-Object Psobject -Property @{
    	Name = $Name
    	Anzahl = $anzahl
    	MemberOf = $MemberOf
        $array.Add($Obj)
    }
    Hi ich bitte um Entschuldigung, ist mein erster Beitrag gewesen :)
    Freitag, 15. Februar 2019 14:49
  • Hier schon mal ein Anfang ... ich hoffe, ich hab die Anforderung richtig verstanden ....

    $Searchbase = 'hier den distinguished name der OU eintragen'
    Get-ADGroup -Filter "Name -like 'xyw-ctx*' -or Name -like 'xyz-ctx*'" -SearchBase $Searchbase -Properties MemberOf | 
        ForEach-Object {
            $Members = Get-ADGroupMember -Identity $_
            [PSCustomObject]@{
                Name = $_.Name
                UserMembersCount = @($Members | Where-Object -Property objectClass -EQ user).count
                GroupMemberSCount = @($Members | Where-Object -Property objectClass -EQ group).count
                MemberOf = @($_.MemberOf) -join ','
            }
        }

    Edit: ... so .. MemberOf noch hinzugefügt ... passt so?  ;-)

    Edit2:  ... so  ... Filter noch angepasst ... so sollte's aber passen.  ;-) ;-)


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''





    • Bearbeitet BOfH-666 Freitag, 15. Februar 2019 15:04
    • Als Antwort markiert Ceddiho Freitag, 15. Februar 2019 15:11
    • Tag als Antwort aufgehoben Ceddiho Freitag, 15. Februar 2019 15:12
    • Als Antwort markiert Ceddiho Freitag, 15. Februar 2019 15:12
    Freitag, 15. Februar 2019 14:49
  • dann habe ich aber doch immer noch nicht die Gruppennamen angezeigt.
    Freitag, 15. Februar 2019 14:50
  • Das sieht schonmal super aus, von hier aus komm ich super allein zurecht. Habs mal wieder viel zu kompliziert und unnötig gedacht.

    Vielen Dank für die schnelle Hilfe!

    Freitag, 15. Februar 2019 15:12