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

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

Printed on: April 25, 2024 at 12:04 o'clock

Mitglied: 141815
Solution 141815 Nov 13, 2019 updated at 15:21:12 (UTC)
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}}  
Member: ChristineS
ChristineS Nov 14, 2019 at 11:11:06 (UTC)
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]}}
Mitglied: 141815
141815 Nov 14, 2019 updated at 11:26:55 (UTC)
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}}  
Member: ChristineS
ChristineS Nov 14, 2019 at 15:11:32 (UTC)
Goto Top
Oh, vielen Dank das war mir tatsächlich nicht bewußt.
Also dann nehme ich deine Wahl dankend an.

lg
Christine