Powershell 篩選或選擇某些對象

Powershell 篩選或選擇某些對象

所以當我運行這個命令時:

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 一起使用

相關內容