如何通过导入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
相关产品推荐
相关产品推荐

