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

如何通过导入CSV为AD用户单独设置服务权限

解决PowerShell批量设置AD用户服务权限的单值属性错误

问题原因

你遇到的错误Set-ADUser : Multiple values were specified for an attribute that can have only one value,本质是循环中$testAdd."Service Role"和$testAdd."Service Segment"返回的是所有待添加用户的角色/分段数组,而AD的serviceRole和serviceSegment是单值属性,无法接受多值赋值。

修复方案

不要单独提取SamAccountName数组,直接遍历筛选后的CSV记录,让每条记录对应一个用户的操作信息,确保每个用户只被赋予自身对应的权限值。

修正后的完整代码

# 导入CSV并筛选需要添加权限的记录
$test = Import-Csv -LiteralPath "C:\Users\Username\Documents\PS Scripts\test.csv"
$testAdd = $test | Where-Object {$_.ACTION -like "Add*"}

# 遍历每条记录,为对应用户设置权限
foreach ($record in $testAdd) {
    # 根据当前记录的EmployeeID查询AD用户
    $adUser = Get-ADUser -Filter "EmployeeID -eq '$($record.'Employee ID')'" -Properties SamAccountName
    
    if ($adUser) {
        # 为当前用户设置对应的服务角色和分段
        Set-ADUser -Identity $adUser.SamAccountName `
                   -Replace @{
                       serviceRole = $record.'Service Role'
                       serviceSegment = $record.'Service Segment'
                   } `
                   -Credential $creds
        
        Write-Host "成功为用户 $($adUser.SamAccountName) 配置权限:角色=$($record.'Service Role'),分段=$($record.'Service Segment')"
    }
    else {
        Write-Warning "未找到EmployeeID为 $($record.'Employee ID') 的AD用户,跳过该条记录"
    }
}

关键修正点

  • 直接遍历$testAdd集合的单条记录,确保每个用户对应唯一的serviceRole和serviceSegment值,避免传递数组
  • 增加AD用户存在性检查,防止因用户不存在导致的脚本中断
  • 使用$record对象直接获取当前用户的所有关联信息,逻辑更清晰,避免数据不匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:49