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

如何通过匹配姓名为AD中缺失EmployeeID的用户批量更新ID?

技术解决方案:匹配HR CSV与AD用户并更新EmployeeID

需求背景

近期已完成SuccessFactors与本地AD(On-Prem AD)的Azure AD配置集成。为使部分现有用户纳入更新配置范围,需先通过员工ID(EmployeeID)进行匹配(当前未启用创建功能)。已确认约400名用户需完成匹配,HR团队提供了包含「全名(Full Name)、员工ID(EmployeeID)」属性的CSV文件。需将该文件与AD中无员工ID的所有用户进行比对,为匹配成功的用户更新EmployeeID。

现有PowerShell脚本

#导入包含「正式姓名(Formal Name)、员工ID(EmployeeID)」属性的HR文件
#返回约6500条记录
$SFUsers = Import-Csv Z:\ExportsFromProd\Global_ActiveHeadcountReport_08292022.csv

#返回约1400条记录
#部分账户从未设置员工ID
$users = Get-ADUser -Filter "*" -Properties EmployeeID | Where-Object {$_.employeeID -eq $null}

foreach ($account in $users) {

    $accountName = $account.name
    get-aduser -Filter {Name -eq $accountName} -Properties * | Select-Object samaccountname, displayName

    #以下是需要帮助的部分:

    <#
       try {
            在$SFUsers数组中查找匹配$accountName的「正式姓名(Formal Name)」?
            获取对应的员工ID并执行:set-aduser $account -employeeId 对应员工ID
            
        }
        catch {

        }
        finally {

        }
    #>
}

优化后的解决方案脚本

核心优化点

  1. 将HR CSV数据转换为哈希表,以「全名」为键、「员工ID」为值,大幅提升匹配效率(避免每次循环遍历6500条记录)
  2. 移除冗余的Get-ADUser调用,直接使用已获取的AD用户对象
  3. 添加错误处理与日志输出,便于排查问题
# 导入HR CSV文件,注意确认CSV中的姓名列标题是否为"Full Name",如果是中文标题需对应修改
$SFUsers = Import-Csv Z:\ExportsFromProd\Global_ActiveHeadcountReport_08292022.csv

# 将SFUsers转换为哈希表,键为全名,值为员工ID
$sfUserMap = @{}
foreach ($sfUser in $SFUsers) {
    # 确保姓名不为空,避免无效键
    if (-not [string]::IsNullOrWhiteSpace($sfUser.'Full Name')) {
        $sfUserMap[$sfUser.'Full Name'] = $sfUser.EmployeeID
    }
}

# 获取AD中未设置EmployeeID的用户(用AD Filter替代Where-Object,提升查询效率)
$adUsersWithoutEmpID = Get-ADUser -Filter "EmployeeID -notlike '*'" -Properties EmployeeID, DisplayName

# 遍历AD用户进行匹配与更新
foreach ($adUser in $adUsersWithoutEmpID) {
    $userName = $adUser.Name
    Write-Host "正在处理用户: $userName"

    # 在哈希表中查找匹配的员工ID
    if ($sfUserMap.ContainsKey($userName)) {
        $targetEmpID = $sfUserMap[$userName]
        try {
            # 更新AD用户的EmployeeID属性
            Set-ADUser -Identity $adUser -EmployeeID $targetEmpID -ErrorAction Stop
            Write-Host "✅ 成功为用户 $userName 更新EmployeeID为: $targetEmpID"
        }
        catch {
            Write-Host "❌ 更新用户 $userName 失败: $_" -ForegroundColor Red
        }
    }
    else {
        Write-Host "⚠️ 在HR文件中未找到用户 $userName 的匹配记录" -ForegroundColor Yellow
    }
}

注意事项

  • 确认CSV文件中的姓名列标题与脚本中$sfUser.'Full Name'一致,如果CSV列是中文「全名」,需修改为$sfUser.'全名'
  • 建议先在测试环境验证脚本,避免误操作生产AD
  • 如果AD用户的Name属性与HR文件中的「全名」格式不一致(比如存在后缀、缩写差异),可调整匹配逻辑为使用DisplayName替代Name,或添加模糊匹配逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:46:19