
Wenn ich also diesen Befehl ausführe:
Get-ADUser -Filter 'Name -like "*svc*"' | select Name, DistinguishedName
Ich erhalte folgende Ergebnisse:
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com
Ich möchte den DistinguishedName filtern, um nur die erste OU bereitzustellen. Ich sollte hinzufügen, dass ich nicht erwarte, dass „Dienstkonten“ das einzige Element im OU-Feld ist. Ich hätte gerne folgende Ergebnisse:
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount OU=Service Accounts
Ich habe versucht, daraus mithilfe von Filter einen Einzeiler zu machen, aber ohne Erfolg. Vielleicht muss ich den Befehl aufteilen und ihn in mehr Code ausarbeiten, um DistinguishedName aufzuteilen. Ich denke, es gibt eine einfache Lösung dafür, und ich mache es komplizierter. Irgendwelche Gedanken oder Ideen?
Antwort1
Habe eine nette Antwort gefundenHier. Pipe Get-ADUser
zu dieser Select-Object
Anweisung:
select Name,@{l='DistinguishedName';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}
Die Ausgabe ist:
Name DistinguishedName
---- -----------------
svc_myaccount Service Accounts
Antwort2
Der Filter analysiert keine Zeichenfolgen, sondern gibt nur die Daten zurück, die Sie angefordert haben. Wenn Sie DN, Gruppenzeichenfolgen oder Arrays abrufen, also alles, was keine einzelne Zeichenfolge ist, müssen Sie es selbst analysieren, entweder mithilfe von Teilzeichenfolgen oder regulären Ausdrücken.
Hier ist eine Option mit Regex und Split
# Parse the DN for the OU array list
Remove the CN and split
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(',')
# Results
OU=Service Accounts
OU=me3
OU=me2
DC=me
DC=com
#Get just the first element of the above array - arrays are zero based
(('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com' -replace 'CN=[^=]*,') -split(','))[0]
#Results
OU=Service Accounts
Verwendung des obigen Ansatzes mit einer berechneten Eigenschaft
# Pulling live from ADDS
Get-ADUser -Filter 'Name -like "*svc*"' |
Select-Object -Property Name,
@{Name='DistinguishedName';Expression = { (($_.DistinguishedName -replace 'CN=[^=]*,') -split(','))[0]}}
Oder dies als berechnete Eigenschaft ...
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com').split(',|=')[3]
... mit einem oder (der Pipe zwischen den beiden geteilten Zeichenketten) in der Teilung. Es ist auch eine Regex-Sache, die mit .split funktioniert.