基于Active Directory组成员批量设置preferredLanguage报错求助
AD用户preferredLanguage属性批量修改问题解决
错误原因
Get-AdGroupMember返回的是AD对象数组(可能包含用户、嵌套组等),而Get-ADUser的Identity参数仅支持单个用户标识(如SamAccountName、DistinguishedName),无法直接接收数组类型,因此触发参数转换错误。
修正方案
方案1:管道链式处理(推荐)
直接通过管道传递筛选后的用户对象,避免数组传递问题:
# 筛选组内用户并批量修改属性 Get-AdGroupMember -Identity "AD-Group-UK" | Where-Object { $_.objectClass -eq 'user' } | Get-ADUser -Properties preferredLanguage | Set-ADUser -Replace @{preferredLanguage = "en"}
- 用
Where-Object过滤掉组内的嵌套组,只保留用户对象 - 管道自动逐个传递用户对象给
Get-ADUser,无需手动遍历
方案2:遍历数组处理
如果需要先存储用户列表再操作,可通过循环逐个处理:
# 获取组内用户并存储 $Users_UK = Get-AdGroupMember -Identity "AD-Group-UK" | Where-Object { $_.objectClass -eq 'user' } # 遍历修改每个用户的属性 foreach ($user in $Users_UK) { Get-ADUser $user.SamAccountName -Properties preferredLanguage | Set-ADUser -Replace @{preferredLanguage = "en"} }
- 提取用户的
SamAccountName作为Get-ADUser的唯一标识,避免对象类型不匹配
注意事项
- 执行脚本的账号需具备修改AD用户属性的权限
- 若组内用户数量较多,建议添加
Start-Sleep -Milliseconds 100到循环内,降低域控负载 preferredLanguage标准格式为语言-地区(如en-GB),仅写en也可被多数系统识别,但部分场景可能需要完整格式
内容的提问来源于stack exchange,提问作者AntonioGrissini
相关产品推荐
相关产品推荐

