christines
Goto Top

Nur die OU aus DistinguishedName ausgeben

Hallo,

ich habe ein einfaches Script um alle aktiven User aus unserem AD auszulesen und verschiedene Felder in einer Textdatei auszugeben.
Jetzt wäre es hilfreich statt dem kompletten DistinguishedName nur die OU des Users auszugeben.
Ich bin mir sicher das ich so etwas schon mal gelesen habe aber momentan fühle ich mich erschlagen von den vielen Google Suchergebnisse.

Für einen Denkanstoss wäre ich dankbar.

$suche = { name -like "*" -and Enabled -eq $true }  
$Eigenschaften = "Title","GivenName","state","StreetAddress","telephoneNumber","MobilePhone","facsimileTelephoneNumber","targetAddress","EmailAddress","Company","Country","CN","Manager","City"  
$Ausgabe = "DistinguishedName","SamAccountName","Surname","GivenName","Title","state","StreetAddress","telephoneNumber","MobilePhone","facsimileTelephoneNumber","targetAddress","EmailAddress","Company","Country","CN","Manager","City"  
$Ausgabedatei = "C:\Temp\Powershell\PS_test.txt"  

# Alte Datei loeschen

{
    If (Test-Path $Ausgabedatei) {
        Remove-Item $Ausgabedatei -whatif
    }}


Get-ADUser -SearchBase "OU=Users,OU=xx,DC=xx,DC=xx" -Filter $suche -Properties * | select $Ausgabe |  
export-csv $Ausgabedatei -Delimiter ';' -NoType  

Content-ID: 514613

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

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

141815
Lösung 141815 13.11.2019 aktualisiert um 16:21:12 Uhr
Goto Top
Get-ADUser -SearchBase "OU=Users,OU=xx,DC=xx,DC=xx" -Filter $suche -Properties * | select SamAccountName, @{n='OU';e={[regex]::match($_.DistinguishedName,'(?is)OU=.*').Value}}  
ChristineS
ChristineS 14.11.2019 um 12:11:06 Uhr
Goto Top
Danke für den Hinweis, das hat mich auf die richtige Spur gebracht. Statt match mit split.

@{n='OU';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}
141815
141815 14.11.2019 aktualisiert um 12:26:55 Uhr
Goto Top
Zitat von @ChristineS:

Danke für den Hinweis, das hat mich auf die richtige Spur gebracht. Statt match mit split.

@{n='OU';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}
ACHTUNG: FALSCH! Anhand des Kommas kannst du du das nicht zuverlässig machen! Der Grund: Das Komma ist ein gültiges Zeichen für Namen der OU oder CN etc. und kann darin vorkommen deswegen ist die Match-Variante wasserdicht, während Split dir früher oder später auf die Füße fällt und nicht mehr funktioniert wenn Kommas im Namen enthalten sind. Hatte schon seinen Grund warum ich das mit Regex gemacht habe face-wink!

Brauchst du nur den "reinen Namen" der ersten OU nach dem CN dann so
Get-ADUser -SearchBase "OU=Users,OU=xx,DC=xx,DC=xx" -Filter $suche -Properties * | select SamAccountName, @{n='OU';e={[regex]::match($_.DistinguishedName,'(?is)(?<=OU=).*?(?=,(OU|CN|DC)=)').Value}}  
ChristineS
ChristineS 14.11.2019 um 16:11:32 Uhr
Goto Top
Oh, vielen Dank das war mir tatsächlich nicht bewußt.
Also dann nehme ich deine Wahl dankend an.

lg
Christine