andreashoster
Goto Top

Powershell LDAP Abfrage auf Gruppenmitglieder liefert unvollständige Ergebnisse

Schönen guten Abend, noch eine Frage für das Wochenende:

Ich möchte mit Powershell die Mitglieder einer Gruppe ermitteln.
Ich habe folgendes Powershell Beispiel:
    $strFilter = "(&(objectCategory=Group)(cn=$groupname))"  
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher
    $objSearcher.Filter = $strFilter
    $objPath = $objSearcher.FindOne()
    $objGroup = $objPath.GetDirectoryEntry()
    $objGroup   # Anzeige Gruppeninfo
    $objGroup.member  # Anzeige Gruppenmitglieder
Das Code Beispiel funktioniert an sich und gibt folgendes aus (Beispiel, internes durch # ersetzt):
distinguishedName : {CN=GRUPPENNAME,CN=###,DC=###,DC=####,DC=##}
Path              : LDAP://CN=GRUPPENNAME,CN=###,DC=###,DC=####,DC=##

CN=USER1,OU=##,OU=##,OU=##,OU=##,DC=##,DC=##,DC=##
CNUSER2,CN=##,DC=##,DC=##,DC=##
... Weitere User

Problematisch wird es bei den Gruppen Domain Admins, Domain Users, Domain Guests.
Dort wird nur ein Teil der User aufgelistet.
Domain Admins: 8 von 11
Domain Users: 5 von etwas über 700
Domain Guests: 0 von 14.

Am Leerzeichen liegts nicht, die Gruppen Schema Admins und Enterprise Admins werden korrekt angezeigt.
Die Anzeige ändert sich auch nicht beim Ausführen mit einem User der Mitglied der Domain Admins ist, auch nicht beim expliziten Ausführen Als Administrator.

Ein Versuch mit VB Skript und folgendem Code liefert dasselbe Verhalten:
Set obj = GetObject("LDAP://CN=Domain Users,CN=###,DC=####,DC=####,DC=##")  
For Each objGroup In obj.member
    WScript.Echo objGroup
Next

Ein Versuch mit dem Active Directory Modul von Powershell liefert korrekte Ergebnisse:
Import-Module -name ActiveDirectory
$1 = Get-ADGroup -LDAPFilter "(&(objectCategory=Group)(cn=Domain Users))"  
Get-ADGroupMember -Identity $1.SID

Mir ist völlig unklar, warum ich bei den LDAP Abfragen nur Teile sehe.
Berechtigungen sollten es nicht sein, ansonsten sollte ich mit dem Powershell AD-Modul ja das gleiche bekommen.

Hat eventuell irgendjemand eine Ahnung?

Gruß, Andreas

EDIT:
Works as designed, but not as expected.

Die Funktionen der System.DirectoryServices Klassen haben die folgende Eigenheit:
Bei der Auflistung der Member einer Gruppe werden alle User nicht angezeigt, die diese Gruppe als primäre Gruppe haben.
Genauso listet MemberOf beim User nicht die primäre Gruppe auf.

Bedeutet also etwas drumrum programmieren oder doch einfach das Powershell ActiveDirectory Modul auf alle Rechner installieren und das nehmen, das tut wenigstens wie man es erwartet.

Content-ID: 287725

Url: https://administrator.de/contentid/287725

Ausgedruckt am: 24.11.2024 um 15:11 Uhr

122990
122990 06.11.2015 aktualisiert um 17:35:12 Uhr
Goto Top
Moin,
das liegt meist daran das man die Eigenschaften die man abrufen möchte nicht explizit angibt und dann nur gecachte Daten zurückgegeben werden.
https://msdn.microsoft.com/de-de/library/system.directoryservices.direct ...
https://msdn.microsoft.com/de-de/library/ms973834.aspx
https://msdn.microsoft.com/de-de/library/system.directoryservices.direct ...

Probier mal das
$adsi = new-object adsisearcher("LDAP://$(([adsi]'LDAP://rootDSE').defaultNamingContext)","(&(objectCategory=Group)(cn=Domain Admins))","member",[System.DirectoryServices.SearchScope]::Subtree)  
$adsi.FindOne()| %{
    $_.Properties.member
}
Aber es könnten ja auch Gruppen mit mehreren Usern in der Gruppe Mitglied sein, bedenke das.

Könnte eventuell auch daran liegen das ein DC abgefragt wird der keinen kompletten Datenbestand hat.
VB.Net - DirectoryEntry - Unterschiede bei Abfragen über objectGUID und distinguishedName

Gruß grexit
AndreasHoster
AndreasHoster 09.11.2015 um 11:39:35 Uhr
Goto Top
@122990:

Mein Skript parst verschachtelte Gruppen durch.

Die Ursache ist, daß die .Net Klasse System.DirectoryServices die User, die die Gruppe als primäre Gruppe haben, schlichtweg nicht mit auflistet.