none
Powershell, LastIndexOf RRS feed

  • Frage

  • moin

    ich möchte von rechts den Wert der dritten OU herauslesen

    "U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"

    $b = $a.LastIndexOf("OU=", $a.LastIndexOf("OU=")-1)


    geht leider nur zum zweiten


    Chris

    Dienstag, 4. Februar 2020 14:06

Antworten

  • ungefähr so ...
    (("U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de" -split ',')[-5] -split '=')[1]
    ?

    Live long and prosper!

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


    • Bearbeitet BOfH-666 Dienstag, 4. Februar 2020 15:40
    • Als Antwort markiert -- Chris -- Dienstag, 4. Februar 2020 15:56
    • Tag als Antwort aufgehoben -- Chris -- Dienstag, 4. Februar 2020 17:07
    • Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 08:20
    Dienstag, 4. Februar 2020 15:39
  • Das ist doch das Gleiche in grün!? Du fängst von rechts an zu zählen. Nur dass in meinem Schnipsel das "OU=" noch mit weggefräst wird.

    Da bei einer solchen Adresse üblicherweise hinten zwei "DC"-Einträge kommen - Domain und TLD - muss es dann also der 5 Abschnitt von hinten sein.

    Wenn Du unbedingt die OUs noch mit rauszählen willst, kannst Du's ja so machen:
    $DN = "U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"
    $OUListe = ($DN -split ',') |
        Where-Object {$_ -match 'OU='}
    $TargetOU = $OUListe[-3]
    $Output = ($TargetOU -split '=')[1]
    $Output
    So holst Du erstmal alle "OUs" raus und nimmst nur davon die Drittletzte - egal was noch danach folgt.

    Live long and prosper!

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

    • Bearbeitet BOfH-666 Mittwoch, 5. Februar 2020 07:33
    • Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 08:20
    Mittwoch, 5. Februar 2020 07:32
  • Moin,

    wenn man nur die OUs haben will, also nicht den Domänen-Part, kann man sich, wie oben angedeutet, mit RegEx behelfen:

    $DN = "U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"
    $pat = [regex]::new("(?<=OU=).*?(?=\,)")
    $OUs = $pat.Matches($DN) | Select-Object Value
    $OUs[-1]
    liefert die letzte OU ("Alle"), $OUs[-2] die vorletzte usw.

    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 11:40
    Mittwoch, 5. Februar 2020 11:32

Alle Antworten

  • ungefähr so ...
    (("U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de" -split ',')[-5] -split '=')[1]
    ?

    Live long and prosper!

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


    • Bearbeitet BOfH-666 Dienstag, 4. Februar 2020 15:40
    • Als Antwort markiert -- Chris -- Dienstag, 4. Februar 2020 15:56
    • Tag als Antwort aufgehoben -- Chris -- Dienstag, 4. Februar 2020 17:07
    • Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 08:20
    Dienstag, 4. Februar 2020 15:39
  • Hmmm .... passt nicht? .... was fehlt noch?  ;-)

    Live long and prosper!

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

    Dienstag, 4. Februar 2020 22:34
  • ich glaube da müsste man mit RegEx arbeiten, da die OU auch noch unterschiedliche Anzahl haben

    d.h. die [5] können auch [6] sein.

    was fix ist, wäre immer von Rechts gesehen die 3 OU


    Chris

    Mittwoch, 5. Februar 2020 06:32
  • so gehts mit den letzten Werten

    $a = "CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"
    # geht auch "CN=max mustermann,OU=Test, OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"
    
    $b = $a.Split(",")
    $b.Length
    
    $b[$b.Length-6]


    Chris

    Mittwoch, 5. Februar 2020 06:52
  • Das ist doch das Gleiche in grün!? Du fängst von rechts an zu zählen. Nur dass in meinem Schnipsel das "OU=" noch mit weggefräst wird.

    Da bei einer solchen Adresse üblicherweise hinten zwei "DC"-Einträge kommen - Domain und TLD - muss es dann also der 5 Abschnitt von hinten sein.

    Wenn Du unbedingt die OUs noch mit rauszählen willst, kannst Du's ja so machen:
    $DN = "U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"
    $OUListe = ($DN -split ',') |
        Where-Object {$_ -match 'OU='}
    $TargetOU = $OUListe[-3]
    $Output = ($TargetOU -split '=')[1]
    $Output
    So holst Du erstmal alle "OUs" raus und nimmst nur davon die Drittletzte - egal was noch danach folgt.

    Live long and prosper!

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

    • Bearbeitet BOfH-666 Mittwoch, 5. Februar 2020 07:33
    • Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 08:20
    Mittwoch, 5. Februar 2020 07:32
  • stimmt, der Erste Tipp war leserlich und perfekt

    Danke


    Chris

    Mittwoch, 5. Februar 2020 08:20
  • Moin,

    wenn man nur die OUs haben will, also nicht den Domänen-Part, kann man sich, wie oben angedeutet, mit RegEx behelfen:

    $DN = "U123,A0502,\\server\drucker,amt,CN=max mustermann,OU=ABC - Buchhaltung,OU=05 - Abteilung,OU=Windows10,OU=Alle,DC=firma,DC=de"
    $pat = [regex]::new("(?<=OU=).*?(?=\,)")
    $OUs = $pat.Matches($DN) | Select-Object Value
    $OUs[-1]
    liefert die letzte OU ("Alle"), $OUs[-2] die vorletzte usw.

    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 11:40
    Mittwoch, 5. Februar 2020 11:32