You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中提取LDAP memberOf字段中的组名

问题描述

从PowerShell的data.json文件读取LDAP数据时,希望memberOf字段只显示组名(如Gotham),而非完整LDAP路径(如CN=Gotham,OU=Groups,DC=domain,DC=local)。

原代码

cls 
$data = Get-Content C:\data.json  | ConvertFrom-Json

$entries = $data.entries
$users = $entries.attributes

$i = 1
foreach ($user in $users){
   $sAMAccountName = $user.sAMAccountName
   $memberOf = $user.memberOf
   echo $i
   echo $sAMAccountName
   echo $memberOf
   echo "-----------------------"
   $i++
}
$i = $null

当前输出

1
batman
CN=Gotham,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
CN=DC-comics,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
CN=Justice-League,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
-----------------------
2
superman
CN=Metropolis,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
CN=DC-comics,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
CN=Justice-League,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
-----------------------
3
ironman
CN=New-York,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
CN=Marvel,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
CN=Avengers,OU=Groups,OU=UNIVERSUM,DC=universum,DC=local
-----------------------

期望输出

1
batman
Gotham
DC-comics
Justice-League
-----------------------
2
superman
Metropolis
DC-comics
Justice-League
-----------------------
3
ironman
New-York
Marvel
Avengers
-----------------------

解决方法

只需要对memberOf的每个条目提取组名即可,以下是两种简单实现方式:

方式1:字符串拆分替换

先按逗号分割LDAP路径,取第一个元素后去掉CN=前缀:

cls 
$data = Get-Content C:\data.json  | ConvertFrom-Json

$entries = $data.entries
$users = $entries.attributes

$i = 1
foreach ($user in $users){
   $sAMAccountName = $user.sAMAccountName
   $memberOf = $user.memberOf
   echo $i
   echo $sAMAccountName
   # 遍历每个组路径,提取组名
   foreach ($groupPath in $memberOf) {
       ($groupPath -split ',')[0] -replace 'CN='
   }
   echo "-----------------------"
   $i++
}
$i = $null

方式2:正则表达式匹配

直接用正则匹配CN=后面到第一个逗号之间的内容:

cls 
$data = Get-Content C:\data.json  | ConvertFrom-Json

$entries = $data.entries
$users = $entries.attributes

$i = 1
foreach ($user in $users){
   $sAMAccountName = $user.sAMAccountName
   $memberOf = $user.memberOf
   echo $i
   echo $sAMAccountName
   # 遍历每个组路径,用正则提取组名
   foreach ($groupPath in $memberOf) {
       [regex]::Match($groupPath, 'CN=([^,]+)').Groups[1].Value
   }
   echo "-----------------------"
   $i++
}
$i = $null

两种方式都能输出你需要的纯组名格式,选择任意一种即可。

内容的提问来源于stack exchange,提问作者Kubix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:20:31