
所以當我運行這個命令時:
Get-ADUser -Filter 'Name -like "*svc*"' | select Name, DistinguishedName
我得到以下結果:
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com
我想過濾 DistinguishedName 以僅提供第一個 OU。我應該補充一點,我不希望「服務帳戶」成為 OU 欄位中的唯一項目。我希望結果是:
SamAccountName DistinguishedName
-------------- -----------------
svc_myaccount OU=Service Accounts
我一直在嘗試使用 Filter 使其成為單行,但沒有成功。也許我必須分解命令並將其充實為更多程式碼來分解 DistinguishedName。我覺得這個問題有一個簡單的解決方案,但我讓它變得更複雜。有什麼想法或想法嗎?
答案1
找到了一個很好的答案這裡。透過管道傳輸Get-ADUser
到此Select-Object
語句:
select Name,@{l='DistinguishedName';e={$_.DistinguishedName.split(',')[1].split('=')[1]}}
輸出是:
Name DistinguishedName
---- -----------------
svc_myaccount Service Accounts
答案2
過濾器不解析字串,它只傳回您要求的資料。如果您要提取 DN、群組字串或數組,任何不是單一字串的內容,那麼您需要自己解析它,使用子字串或正規表示式
這是使用正規表示式和 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
將上述方法與計算屬性結合使用
# Pulling live from ADDS
Get-ADUser -Filter 'Name -like "*svc*"' |
Select-Object -Property Name,
@{Name='DistinguishedName';Expression = { (($_.DistinguishedName -replace 'CN=[^=]*,') -split(','))[0]}}
或將其作為計算屬性...
('CN=svc_myaccount,OU=Service Accounts,OU=me3,OU=me2,DC=me,DC=com').split(',|=')[3]
……在分割中使用 or (兩個溢出的刺之間的管道)。這也是一個正規表示式,可以與 .split 一起使用