erikro
Goto Top

OpenLDAP-Query sortieren in der Powershell

Moin,

mit Hilfe der Powershell frage ich in einem OpenLDAP das ein oder andere ab. Das funktioniert auch wunderbar. Nur möchte ich gerne das Suchergebnis sortieren. Dazu habe ich bei Google Folgendes gefunden:

    PARAM(

        $query = "(&(objectclass=posixaccount))",  
        $root = "LDAP://192.168.xxx.xxx/dc=domain,dc=de",  
        $sort
    )

    $auth = [System.DirectoryServices.AuthenticationTypes]::Anonymous
    $de = New-Object System.DirectoryServices.DirectoryEntry($root,$null,$null,$auth)
    $search = New-Object system.DirectoryServices.DirectorySearcher($de,$query)
    if($sort) {

        $sorter = New-Object System.DirectoryServices.SortOption
        $sorter.PropertyName = $sort
        $search.sort = $sorter

    }
    
    $result = $search.FindAll()

Gebe ich nun -sort beim Aufruf der Funktion an, dann bekomme ich:

Exception calling "FindAll" with "0" argument(s): "Der Wert für die Sort-Eigenschaft kann nicht festgelegt werden."  
At P:\ldap\get-userlist.ps1:45 char:5
+     $result = $search.FindAll()
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException

Ohne den Parameter -sort läuft das Skript und macht genau das, was es soll. Ich hätte gerne die Möglichkeit, das Ergebnis nach einer bestimmten Eigenschaft zu sortieren. Wie?

Liebe Grüße

Erik

Content-ID: 387912

Url: https://administrator.de/forum/openldap-query-sortieren-in-der-powershell-387912.html

Ausgedruckt am: 26.03.2025 um 11:03 Uhr

certifiedit.net
certifiedit.net 28.09.2018 um 11:08:57 Uhr
Goto Top
fehlt in der Doku nicht der Aufruf?
erikro
erikro 28.09.2018 um 11:15:34 Uhr
Goto Top
Zitat von @certifiedit.net:

fehlt in der Doku nicht der Aufruf?

Wie meinen? face-wink
erikro
erikro 28.09.2018 um 11:16:35 Uhr
Goto Top
Ganz vergessen:
PSVersion 5.1.14409.1005
137289
137289 28.09.2018 um 11:22:50 Uhr
Goto Top
$search.Sort = [System.DirectoryServices.SortOption]::new($sort,[System.DirectoryServices.SortDirection]::Ascending)
erikro
erikro 28.09.2018 um 11:33:20 Uhr
Goto Top
Moin,

Zitat von @137289:

> $search.Sort = [System.DirectoryServices.SortOption]::new($sort,[System.DirectoryServices.SortDirection]::Ascending)
> 

Leider die gleiche Fehlermeldung. face-sad

Liebe Grüße

Erik
137289
137289 28.09.2018 aktualisiert um 11:38:42 Uhr
Goto Top
Hier gehts.
erikro
erikro 28.09.2018 um 11:55:48 Uhr
Goto Top
Zitat von @137289:

Hier gehts.

Mit dem OpenLDAP oder dem MS AD-LDAP? Ich habe langsam den Verdacht, dass es am OpenLDAP liegt.
137289
Lösung 137289 28.09.2018 aktualisiert um 11:57:32 Uhr
Goto Top
Zitat von @erikro:

Zitat von @137289:

Hier gehts.

Mit dem OpenLDAP oder dem MS AD-LDAP? Ich habe langsam den Verdacht, dass es am OpenLDAP liegt.
OpenLDAP.

Mach doch einfach ein Sort-Object in die Pipe, macht dir das selbe ...
137289
137289 28.09.2018 aktualisiert um 12:04:24 Uhr
Goto Top
Du musst natürlich die abzufragenden Eigenschaften im ADSISearcher angeben die du abfragen willst, sonst lüppt dat mit dem Sort ned.
https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.dir ...
erikro
erikro 28.09.2018 um 12:34:27 Uhr
Goto Top
Moin,

jetzt sieht das so aus:

    $auth = [System.DirectoryServices.AuthenticationTypes]::Anonymous
    $de = New-Object System.DirectoryServices.DirectoryEntry($root,$null,$null,$auth)
    $search = New-Object system.DirectoryServices.DirectorySearcher($de,$query,$sort)
    $search.PropertiesToLoad

    if($sort) {

        $search.Sort = [System.DirectoryServices.SortOption]::new($sort,[System.DirectoryServices.SortDirection]::Ascending)

    }

Und trotzdem der gleiche Fehler. Die Zeile 4 steht da, um zu schauen, was denn in PropertiesToLoad drinsteht. Es steht der richtige Wert drin.

Liebe Grüße

Erik
137289
137289 28.09.2018 aktualisiert um 13:01:50 Uhr
Goto Top
es steht der richtige Wert drin.
Der nach deiner Meinung nach wäre?
Mach da ein * rein. Die PS liefert bei einem empty string nicht das richtige, deswegen ein Sternchen rein setzen.
erikro
erikro 28.09.2018 um 13:01:33 Uhr
Goto Top
Zitat von @137289:

es steht der richtige Wert drin.
Der nach deiner Meinung nach wäre?
Mach da ein * rein.

Na der, nach dem ich sortieren will. face-wink

Mit Stern geht es auch nicht. face-sad
137289
137289 28.09.2018 aktualisiert um 13:37:41 Uhr
Goto Top
Das hier geht bspw. bei mir problemlos auf einen OpenLDAP abgefeuert
$domain = New-Object adsi("LDAP://X.X.X.X/dc=domain,dc=tld","USERNAME","PASSWORD")  
$adsi = New-object adsisearcher($domain,"(cn=*)","*",[System.DirectoryServices.SearchScope]::Subtree)  
$adsi.Sort.PropertyName = 'cn'  
$adsi.Sort.Direction = 'Ascending'  
$adsi.FindAll() | %{
    $_.Properties['cn']  
}
Wenns bei dir nicht lüppt k.A., dann machs einfach wie ich oben geschrieben haben einfach das Ergebnis durch Sort-Object pipen, performance technische macht das sowieso kaum einen Unterschied.
erikro
erikro 28.09.2018 um 14:26:14 Uhr
Goto Top
Moin,
Zitat von @137289:
Mach doch einfach ein Sort-Object in die Pipe, macht dir das selbe ...

Sowas in der Art mache ich jetzt. Nächste Woche wird der Chef überredet, dass wir uns anständige Windows-Server anschaffen. Dann gehen die AD-Befehle. face-wink

Liebe Grüße

Erik