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-Key: 387912

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

Printed on: April 16, 2024 at 19:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Sep 28, 2018 at 09:08:57 (UTC)
Goto Top
fehlt in der Doku nicht der Aufruf?
Member: erikro
erikro Sep 28, 2018 at 09:15:34 (UTC)
Goto Top
Zitat von @falscher-sperrstatus:

fehlt in der Doku nicht der Aufruf?

Wie meinen? face-wink
Member: erikro
erikro Sep 28, 2018 at 09:16:35 (UTC)
Goto Top
Ganz vergessen:
PSVersion 5.1.14409.1005
Mitglied: 137289
137289 Sep 28, 2018 at 09:22:50 (UTC)
Goto Top
$search.Sort = [System.DirectoryServices.SortOption]::new($sort,[System.DirectoryServices.SortDirection]::Ascending)
Member: erikro
erikro Sep 28, 2018 at 09:33:20 (UTC)
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
Mitglied: 137289
137289 Sep 28, 2018 updated at 09:38:42 (UTC)
Goto Top
Hier gehts.
Member: erikro
erikro Sep 28, 2018 at 09:55:48 (UTC)
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.
Mitglied: 137289
Solution 137289 Sep 28, 2018 updated at 09:57:32 (UTC)
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 ...
Mitglied: 137289
137289 Sep 28, 2018 updated at 10:04:24 (UTC)
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 ...
Member: erikro
erikro Sep 28, 2018 at 10:34:27 (UTC)
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
Mitglied: 137289
137289 Sep 28, 2018 updated at 11:01:50 (UTC)
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.
Member: erikro
erikro Sep 28, 2018 at 11:01:33 (UTC)
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
Mitglied: 137289
137289 Sep 28, 2018 updated at 11:37:41 (UTC)
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.
Member: erikro
erikro Sep 28, 2018 at 12:26:14 (UTC)
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