使用PowerShell脚本创建AD联系人时出现属性值错误求助
排查AD联系人导入时“单值属性指定多值”错误的方法
最可能的原因:重复设置cn属性
你的脚本里同时做了两件冲突的操作:
- 通过
Name = $contact.name设置AD对象名称,而AD中Name参数对应的就是cn(通用名)属性 - 又在
OtherAttributes里重复赋值cn属性
这直接导致cn被传入两个值,触发“单值属性指定多值”的错误。先把potentialAttributes列表里的cn移除,就能解决这个最常见的问题。
排查其他潜在的多值属性
如果移除cn后仍报错,说明导入的XML里某个单值属性被存成了数组类型(比如本该是单个字符串,实际存了多个值)。可以给脚本加一段调试代码,提前检测异常属性:
foreach($contact in $import){ # 新增调试逻辑:检查属性是否为数组 foreach($attributeName in $potentialAttributes){ $value = $contact.$attributeName if($null -ne $value -and $value -is [array]){ Write-Warning "联系人 $($contact.name) 的属性 $attributeName 是数组,值为:$($value -join ', ')" } } $newContact=@{ path = "OU=Contacts,DC=A" type = "Contact" Name = $contact.name OtherAttributes = @{} } foreach($attributeName in $potentialAttributes){ if(-not [string]::IsNullOrEmpty($contact.$attributeName)){ $newContact['OtherAttributes'][$attributeName] = $contact.$attributeName } } # 先注释创建操作,先跑调试定位问题 # New-ADObject @newContact }
这段代码会输出所有数组类型的属性,帮你快速定位问题来源。
补充说明
proxyAddresses是AD允许的多值属性,你的脚本处理逻辑没问题- 检查XML时,注意区分单值的
<S>标签和多值的<Array>标签,比如<Array><S>值1</S><S>值2</S></Array>就代表该属性是多值数组
内容的提问来源于stack exchange,提问作者a3kop
相关产品推荐
相关产品推荐

