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

基于CSV导入与AD Office属性通配符匹配批量迁移用户至多个OU

Active Directory Office属性通配符匹配及脚本修正方案

通配符匹配可行性

AD的office属性(LDAP原生属性名为physicalDeliveryOfficeName)完全支持LDAP通配符*做模糊查询:

  • 匹配属性值包含Remote关键词:(physicalDeliveryOfficeName=*Remote*)
  • 匹配属性值开头为Remote:(physicalDeliveryOfficeName=Remote*)
  • 匹配属性值结尾为Remote:(physicalDeliveryOfficeName=*Remote)

注意:编写LDAP查询语句时必须使用原生属性名physicalDeliveryOfficeName,不能直接用PowerShell AD模块显示的别名Office,否则查询会失效。

现有脚本问题修正

你当前脚本的核心逻辑是先定位单个用户,再根据用户的Office属性移动到对应OU,不需要在用户查询阶段加Office通配符,只需要修正Office值和映射表的匹配逻辑,就能处理包含Remote关键词的Office属性值。修正后的完整脚本如下:

$map = @{
'China'           = "China OU DistinguishedName"
'Russia'          = "Russia OU DistinguishedName"
'US - Miami'      = "Miami OU DistinguishedName"
'US - Tampa'      = "Tampa OU DistinguishedName"
'US - Reno'       = "Reno OU DistinguishedName"
'US - Charleston' = "Charleston OU DistinguishedName"
# 如需将所有含Remote标识的用户统一移动到专属OU,保留该行配置即可
'Remote'          = "Remote Users OU DistinguishedName"
}

foreach($line in Import-Csv "C:\Test\Test Files\AD_Test.csv") {
    $firstname = $line.'Legal First Name'.Trim()
    $preferred_firstname = $line.'Preferred First Name'.Trim()

    if($preferred_firstname){
        $firstname = $preferred_firstname
    }

    $lastname = $line.'Last Name'.Trim()
    $displayname = $firstname + " " + $lastname
    $param = @{
        # 按通用名、登录名、显示名三类标识匹配目标用户
        LDAPFilter = "(|(cn=$displayName)(samAccountName=$displayName)(displayName=$displayName))"
        Properties = "Office"
    }

    if($user = Get-ADUser @param) {
        # 优先匹配Remote规则,处理Office值包含Remote关键词的场景
        if($user.Office -match 'Remote') {
            $targetOU = $map['Remote']
        }
        # 非Remote场景走原有精确匹配逻辑
        elseif($map.ContainsKey($user.Office)) {
            $targetOU = $map[$user.Office]
        }
        else {
            Write-Warning "无法识别用户 $displayName 的Office值:$($user.Office),跳过移动操作"
            continue
        }
        $user | Move-ADObject -TargetPath $targetOU
        continue
    }
    Write-Warning "在AD中未找到用户:$displayName"
}

补充:直接查询所有含Remote关键词的用户命令

如果需要批量拉取所有Office属性包含Remote的用户,直接运行以下命令即可:

Get-ADUser -LDAPFilter "(physicalDeliveryOfficeName=*Remote*)" -Properties Office

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:30:44