执行PowerShell AD用户导出脚本时遇Add-Member重复成员错误的技术求助
解决PowerShell Add-Member成员已存在的错误
咱们来逐个搞定你遇到的这两个Add-Member错误:
第一个错误:无法添加名为"CAllerID*"的成员
问题原因
这个报错的原因很直接:要么是Get-ADUser返回的AD用户对象本身就自带了CAllerID*属性,要么是你的脚本逻辑导致重复执行了Add-Member操作——比如你原脚本里把$output既作为Get-ADUser的赋值变量,又立刻把$output传入管道,这种写法很容易触发重复处理,进而重复添加属性。
解决方案
有两种靠谱的处理方式:
- 加
-Force参数强制覆盖:直接在Add-Member命令后追加-Force参数,这样就算属性已存在,也会被强制覆盖成你指定的$null值:
Get-ADUser -Identity user -Properties givenName, sn, displayname, samaccountname, title | Add-Member -MemberType NoteProperty -Name "CAllerID*" -Value $null -Force | Export-CSV -Path "c:\tmp\users.csv" -NoTypeInformation -Encoding UTF8
- 用
Select-Object创建新属性更安全:如果不想覆盖原有属性,或者不确定属性是否存在,可以用Select-Object生成包含新属性的自定义对象,从根源避免冲突:
Get-ADUser -Identity user -Properties givenName, sn, displayname, samaccountname, title | Select-Object givenName, sn, displayname, samaccountname, title, @{Name="CAllerID*"; Expression={$null}} | Export-CSV -Path "c:\tmp\users.csv" -NoTypeInformation -Encoding UTF8
第二个错误:无法添加名为""的成员
问题原因
这个报错说明你的Add-Member命令里-Name参数的值是空字符串,大概率是脚本编写时的笔误(比如不小心删了属性名),或者用来指定属性名的变量没正确赋值。
解决方案
仔细检查你的Add-Member命令,确保-Name参数指定了有效的非空属性名称,比如像第一个错误里的"CAllerID*"这样明确的字符串,避免出现空值情况。
额外优化你的原有脚本
注意到你原脚本有个逻辑小问题:$output = Get-ADUser ... $output | Add-Member,这种先赋值再立刻把变量传入管道的写法,很容易因为$output之前的残留值导致重复处理。直接用管道链式处理即可,逻辑更清晰也不容易出错,就像上面给出的示例脚本那样。
内容的提问来源于stack exchange,提问作者Arbelac
相关产品推荐
相关产品推荐

