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

如何通过编程将AD用户的OrganizationalUnit名称复制到Location属性

提取AD用户OU路径并更新Location属性

核心思路

从用户的DistinguishedName字段中剥离OU部分,将其转换为父OU\子OU的层级格式,再批量写入用户的Location属性。

实现脚本

# 获取所有AD用户,仅加载必要属性提升效率
$users = Get-ADUser -Filter * -Properties DistinguishedName, Location

foreach ($user in $users) {
    # 拆分DistinguishedName,过滤出所有OU开头的片段
    $ouSegments = $user.DistinguishedName -split ',' | Where-Object { $_ -match '^OU=' }
    
    # 如果用户存在于OU中(而非根域)
    if ($ouSegments) {
        # 提取每个OU的名称(去掉OU=前缀),并反转顺序(从父OU到子OU)
        $ouNames = $ouSegments | ForEach-Object { $_ -replace '^OU=', '' } | Reverse
        # 拼接成OU\子OU的格式
        $locationPath = $ouNames -join '\'
        
        # 仅当Location属性与目标路径不一致时更新,避免不必要的AD操作
        if ($user.Location -ne $locationPath) {
            Set-ADUser -Identity $user -Location $locationPath
            Write-Host "已更新用户 $($user.Name) 的Location属性为: $locationPath"
        } else {
            Write-Host "用户 $($user.Name) 的Location属性已为目标值,无需更新"
        }
    } else {
        Write-Host "用户 $($user.Name) 位于根域,无OU信息,跳过更新"
    }
}

关键步骤说明

  • 高效获取用户属性:避免使用Properties *,只指定DistinguishedName和Location,减少AD查询负载。
  • OU片段提取与转换:通过拆分DN字符串筛选OU片段,反转顺序后拼接成层级路径,符合父OU\子OU的展示需求。
  • 增量更新:先判断当前Location属性是否与目标路径一致,仅在不同时执行更新,降低AD操作频次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:37:12