嘗試提取用戶所屬的 AD 組名稱的簡單代碼:
Get-ADUser johndoe -Properties MemberOf
但我得到的是每個組的完整 DN,如下所示:
CN=APP_DUO_MFA_U,OU=Groups,OU=Accounts,OU=BH-ROOT,DC=bh,DC=contoso,DC=org,
我希望它回傳的只是“APP_DUO_MFA_U”。我究竟做錯了什么???
uj5u.com熱心網友回復:
您沒有做錯任何事情,該memberOf欄位確實包含 DN 串列!
您可以對 AD 進行第二次查詢以決議目標組的Name值:
$groupNames = (Get-ADUser johndoe -Properties memberOf).memberOf |Get-ADGroup |ForEach-Object Name
或者,如果您只需要CN(可能與Name) 值相同,請使用基于正則運算式的-replace運算子洗掉 RDN 以及第一個非轉義逗號中的所有內容:
$groupNames = (Get-ADUser johndoe -Properties memberOf).memberOf -replace '^CN=(.*?)(?<=[^\\]),.*$','$1'
uj5u.com熱心網友回復:
如果CN要從 a 中提取值DN,一種有效的方法是洗掉不需要的字串。
# Using the -replace operator
(Get-ADUser johndoe -Properties MemberOf).MemberOf -replace '^CN=(.*?),[A-Z]{2}=.*$','$1'
# Using -split
(Get-ADUser johndoe -Properties MemberOf).MemberOf.foreach{
($_ -split ',?[A-Z]{2}=')[1]
}
解釋:
對于-replace,目標是洗掉開頭CN=( ^CN=)。然后洗掉所有內容,直到下一個逗號后跟域組件 ( DC=) 或組織單元 ( OU=),后者由惰性匹配(.*?)和,[A-Z]{2}=. .*$匹配剩余的字符,直到字串的結尾。由于我們使用()了惰性匹配,我們可以稍后將$1其替換為,這表示捕獲組1。簡而言之,洗掉整個 DN 并只帶回您想要查看的部分。
對于-split,您將不得不遍歷每個DN. 該foreach()方法或Foreach-Object就足夠了。該代碼會將字串拆分為 DN 部分的值。該CN值將始終是第二部分,即 index 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/409801.html
標籤:
上一篇:powershell管道運算子
