通过PowerShell更新本地Active Directory用户extensionAttribute1属性求助
问题根因
- 错误地将AD用户对象(
$ADUserG/$ADUserS)直接作为字符串拼接,实际需要调用对象的属性值,即$ADUserG.givenName、$ADUserS.Surname - 多余的
[Array]强制类型转换导致值类型不符合AD扩展属性要求的字符串类型 - 不必要的多次
Get-ADUser查询,同一个用户可以一次查询取出所有需要的属性,不用查三次 - 中间导出CSV再导入的操作完全多余,直接管道处理AD用户即可,效率更高也避免CSV读写出错
修正后可直接运行的脚本
Import-Module ActiveDirectory # 直接查询所有需要的用户,一次性取出所有需要的属性 Get-ADUser -Filter * -SearchBase 'ou=Users,ou=Test,dc=Sample,dc=Com' -Properties givenName,Surname,extensionAttribute1 | ForEach-Object { # 拼接得到First.Last格式的字符串 $newAttrValue = "$($_.givenName).$($_.Surname)" # 更新属性 Set-ADUser -Instance $_ -Replace @{extensionAttribute1 = $newAttrValue} } # 导出结果验证 Get-ADUser -Filter * -SearchBase 'ou=Users,ou=Test,dc=George,dc=Com' -Properties extensionAttribute1 | Select SamAccountName,extensionAttribute1 | Export-Csv -Path 'c:\Scripts\new-AllUserinfo6.CSV' -NoTypeInformation -Encoding UTF8
额外注意点
- 执行前建议先在
Set-ADUser命令后加-WhatIf参数测试,确认更新逻辑正确后再去掉参数正式执行 - 如果部分用户的givenName或Surname为空,建议先加判断过滤,避免生成只有
.的无效值 - 导出CSV时加
-Encoding UTF8避免非英文用户名乱码
内容的提问来源于stack exchange,提问作者Kazic
相关产品推荐
相关产品推荐

