批量编辑AD用户costCenter属性时Windows PowerShell报错求助
解决Set-ADUser修改costCenter属性时的“Positional parameter cannot be found”错误
问题原因
你遇到的错误核心是对AD属性名和Set-ADUser参数的误解:
- AD架构里的属性描述“Cost Center”只是友好显示名称,实际属性名是
costCenter(无空格、无连字符) - 你写的
-"Cost-Center"不是Set-ADUser的有效参数,PowerShell无法识别这个参数,将其误判为位置参数,最终导致参数绑定失败,抛出“找不到接受参数'MM'的位置参数”错误
正确解决方案
有两种可靠的方式修改AD用户的costCenter属性:
方式1:使用Set-ADUser内置参数
Set-ADUser提供了对应costCenter属性的内置参数-CostCenter(仅首字母大写,无连字符),直接调用即可:
Import-Module ActiveDirectory $Attribcsv = Import-Csv "C:\Temp\ADUsers_BulkEdit.csv" foreach ($User in $Attribcsv) { Get-ADUser -Identity $User.samAccountName | Set-ADUser -CostCenter $User.costCenter }
方式2:通用属性修改方式(适用于无内置参数的AD属性)
如果遇到Set-ADUser没有提供对应内置参数的AD属性,可以用-Replace参数传入哈希表来批量修改:
Import-Module ActiveDirectory $Attribcsv = Import-Csv "C:\Temp\ADUsers_BulkEdit.csv" foreach ($User in $Attribcsv) { Get-ADUser -Identity $User.samAccountName | Set-ADUser -Replace @{ costCenter = $User.costCenter } }
补充说明
你之前修改description和comment成功,是因为Set-ADUser正好有对应的-Description和-Comment内置参数,参数名和属性名规则匹配(仅首字母大写),所以没有触发参数识别错误。
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

