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

如何在PowerShell脚本中提取AD用户Manager字段的manager-id?

解决方法

有两种实用方式可以提取Manager的ID,推荐第二种更可靠的AD原生处理方法:

方法一:正则表达式提取

直接从LDAP路径字符串里匹配CN=后到第一个逗号前的内容:
修改代码里Manager的赋值部分即可:

Manager  = if ($user.Manager) { [regex]::Match($user.Manager, 'CN=([^,]+)').Groups[1].Value } else { $null }

说明:正则CN=([^,]+)会精准捕获CN=开头后所有非逗号的字符,也就是我们要的manager-id。加if判断是为了处理用户未设置Manager的情况,避免报错。

方法二:通过AD对象获取(更可靠)

既然在AD环境中,直接通过$user.Manager的LDAP路径获取对应的AD用户对象,再取其登录ID或名称属性,这种方式更准确,尤其适合CN和登录ID不一致的场景:
修改代码中Manager的赋值部分:

Manager  = if ($user.Manager) { (Get-ADUser -Identity $user.Manager).SamAccountName } else { $null }

说明:如果$user.Manager不为空,就用Get-ADUser获取该管理员的AD对象,取SamAccountName作为Manager的值;为空则赋值$null,避免CSV中出现无效内容。

完整修改后的代码

Class CustomAdInfo {
    $UserName
    $Group
    $Email
    $Manager
}

[char] 'y'..[char] 'z' | ForEach-Object {
    $getADUserSplat = @{
        Filter         = "Name -like '$_*'"
        Properties     = 'SamAccountName', 'memberOf', 'EmailAddress', 'Manager'
        ResultPageSize = 256
        SearchBase     = 'CN=Users,DC=ab,DC=cd'
    }
    foreach ($user in Get-ADUser @getADUserSplat) {
        foreach ($group in $user.MemberOf | Get-ADGroup) {
            [CustomAdInfo]@{
                UserName = $user.SamAccountName
                Group    = $group.Name
                Email    = $user.EmailAddress
                # 这里用的是方法二的写法,如需用正则替换成方法一的代码即可
                Manager  = if ($user.Manager) { (Get-ADUser -Identity $user.Manager).SamAccountName } else { $null }
            }
        }
    }
} | Export-Csv 'C:\Users\Downloads\Members_and_Groups.csv' -NoTypeInformation

注意:最后加-NoTypeInformation参数可以避免CSV开头出现#TYPE CustomAdInfo的无用行,输出更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:42:37