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:
Das Code Beispiel funktioniert an sich und gibt folgendes aus (Beispiel, internes durch # ersetzt):
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:
Ein Versuch mit dem Active Directory Modul von Powershell liefert korrekte Ergebnisse:
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.
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
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 287725
Url: https://administrator.de/contentid/287725
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
2 Kommentare
Neuester Kommentar
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
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
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
}
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