Benutzer mit den meisten Antworten
Powershell, LastIndexOf

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
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
-
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
-
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
- Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 11:40
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
-
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
-
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
-
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
- Als Antwort markiert -- Chris -- Mittwoch, 5. Februar 2020 11:40