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

如何提取AD用户DistinguishedName中的指定OU段并格式化输出?

解决AD用户查询中OU列为空并自定义格式的问题

问题原因

AD用户对象并没有名为OU的内置属性,你之前在$ADExtProps里指定的OU是无效的,所以Get-ADUser无法获取对应数据,导致输出的OU列显示为空的{}。

解决方案

要实现「(子OU名称) under (父OU名称)」的格式,需要从用户的DistinguishedName属性中解析OU层级信息,通过计算属性生成自定义的OU列内容。

完整代码示例

# 指定需要获取的基础属性,DistinguishedName用于解析OU信息
$ADProps = @('Enabled', 'SamAccountName')

Get-ADUser -Filter * -SearchBase $TestOU -Properties $ADProps |
    Select-Object Enabled, SamAccountName, @{
        Name = 'OU'
        Expression = {
            # 拆分DistinguishedName,提取所有OU段
            $ouSegments = $_.DistinguishedName -split ',' | Where-Object { $_ -like 'OU=*' }
            
            switch ($ouSegments.Count) {
                0 { 'No OU' }
                1 {
                    $ouName = $ouSegments[0] -replace '^OU=', ''
                    "($ouName)"
                }
                default {
                    $childOU = $ouSegments[0] -replace '^OU=', ''
                    $parentOU = $ouSegments[1] -replace '^OU=', ''
                    "($childOU) under ($parentOU)"
                }
            }
        }
    } | Format-Table -AutoSize -Wrap

代码说明

  1. 属性获取:DistinguishedName是Get-ADUser默认返回的属性,无需额外指定;如果需要确保获取到,也可以加入$ADProps数组。
  2. 计算属性逻辑:
    • 按逗号拆分DistinguishedName,筛选出所有以OU=开头的段落,这些就是用户所在的OU层级(最靠近用户的OU排在最前面)。
    • 根据OU段的数量分支处理:
      • 没有OU段时,显示No OU(用户直接在域根节点)。
      • 只有一个OU段时,直接显示该OU名称。
      • 两个及以上OU段时,提取第一个(子OU)和第二个(父OU),格式化为要求的字符串。

执行这段代码后,OU列会按照你需要的格式显示内容,不再是空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:25:30