我想今天给自己一个有趣的小项目,但现在它已经变成了一个问题,解决方案也找不到了。我有一个巨大的.Csv文件,其中包含所有员工的sAMAccountName
和telephoneNumber
属性。我想更新我们Active Directory中的所有电话号码。我正在浏览一些旧脚本,采取零件和零件,将工作,这我的第一次迭代让我也在这里。
$Users = Import-Csv -Path C:\Results\EmployeeExtsTest.csv
ForEach ($User in $Users) {
$User = $User.sAMAccountName
$telephoneNumber = $User.telephoneNumber
Get-ADUser -Identity $User | Set-ADUser -telephoneNumber $telephoneNumber
}
那时我发现PowerShell没有-telephoneNumber
属性,所以我做了一些挖掘,然后来到这里。
$Users = Import-Csv -Path C:\Results\EmployeeExtsTest.csv
ForEach ($User in $Users) {
$User = $User.sAMAccountName
$telephoneNumber = $User.telephoneNumber
Get-ADUser -Identity $User | Set-ADUser -Add @{telephoneNumber=$telephoneNumber}
}
一开始我和我的用户一起测试了它,我一直得到下面的结果。
Set-ADUser : Cannot validate argument on parameter 'Add'. The argument is null or an element of the argument collection contains a null value.
At line:6 char:50
+ ... -Identity $User | Set-ADUser -Add @{telephoneNumber=$telephoneNumber}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Set-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.SetADUser
我知道它正确地阅读了我的.Csv,因为我可以很好地调用它。
sAMAccountName telephoneNumber
-------------- ---------------
zgroven 1121
我知道这个解决方案“应该”很容易,但它完全逃避我!
3条答案
按热度按时间uz75evzq1#
要详细说明@PaulWain答案。Active Directory用户和计算机显示
Telephone Number
,AD属性为telephoneNumber
,但Set-ADUser
奇怪地使用参数OfficePhone
来设置它。由于OfficePhone
是一个“特殊”字段,因此另一个怪癖是,当使用Set-ADUser
清除时,您实际上必须使用telephoneNumber
作为字段。例如:我在脚本中添加的一个内容是在
Get-ADUser
上使用-Filter
参数,这样我就可以验证用户是否存在,而Get-ADUser
不会抛出错误。另一种方法是一次修改所有属性,然后使用
Set-ADUser -Instance
参数一次设置所有属性(注意:OfficePhone/telephoneNumber是特殊的,必须像上面的代码一样手工清除,其他字段可以手工清除/置空):91zkwejq2#
我相信,由于幕后的别名,您正在被显示的内容和属性的实际名称所误导。
请尝试使用此选项:
h9a6wy2h3#
帮我度过难关的最后一个剧本在这里
因为我在一个学区工作,所以我将来会添加更多的内容来寻找失踪的员工。现在这个脚本已经完美地更新了近1000个广告帐户(除了已经离开的失踪员工)。我想感谢你们所有人帮助我得到了这个答案。你们让我在工作中做得更好。
特别感谢@PaulWain和@HAL9256