我正在尝试使用CSV文件和PowerShell脚本更新ActiveDirectory信息。
foreach ($user in $users) {
Get-ADUser -Identity $user.SamAccountName -Properties *
}
返回CSV文件中用户的值,我可以在ActiveDirectory中看到属性名称和值。
这段代码:
$users = Import-Csv -Path C:\ADTest\DirectoryExport2.csv
foreach ($user in $users) {
#Search and Update existing attributes
Get-ADUser -Identity $user.samaccountname |
Set-ADUser -Replace @{GivenName=$user.givenName}
允许我用我的CSV中的值替换ActiveDirectory中的GivenName
值。我还需要更新8个值,当我尝试将这些值添加到代码中时,它不起作用。
这是我尝试过的两次代码尝试:
$users = Import-Csv -Path C:\ADTest\DirectoryExport2.csv
foreach ($user in $users) {
#Search and Update existing attributes
Get-ADUser -Identity $user.samaccountname |
Set-ADUser -Replace @{GivenName=$user.givenName}
Get-ADUser -Identity $user.samaccountname |
Set-ADUser -Replace @{Surname=$user.sn}
}
我也试过这个:
$users = Import-Csv -Path C:\ADTest\DirectoryExport2.csv
foreach ($user in $users) {
#Search and Update existing attributes
Get-ADUser -Identity $user.samaccountname |
Set-ADUser -Replace @{GivenName=$user.givenName;Surname=$user.sn}
}
但是我为这两次尝试都收到了同样的错误消息:
这是错误讯息:
Set-ADUser : The specified directory service attribute or value does not exist Parameter name: Surname At line:5 char:55 + Get-ADUser -Identity $user.samaccountname | Set-ADUser <<<< -replace @{Surname=$user.sn} + CategoryInfo : InvalidArgument: (CN=Test1User1,O...-sheriff,DC=net:ADUser) [Set-ADUser], ArgumentException + FullyQualifiedErrorId : The specified directory service attribute or value does not exist Parameter name: Surname,Microsoft.ActiveDirectory.Management.Commands.SetADUser
参数名称Surname
确实存在于ActiveDirectory中,因为我在运行上面的第一个代码时可以看到它是该查询的结果。你可以看到它们是空白的。
State : StreetAddress : Surname : Title :
有谁能解释我在这里做错了什么?
答案 0 :(得分:2)
TechNet for Set-ADUser
在此处有部分答案。误解是认为PowerShell和Active Directory中的活动目录cmdlet的用户属性之间存在直接关联。
查看Set-ADUser
的参数列表。您显示的示例已涵盖,您无需使用-Replace
。 Set-ADUser
也有一个-Identity
参数,因此您可以跳过一个cmdlet。
Set-ADUser -Identity $user.samaccountname -Surname $user.sn -GivenName $user.givenName
由于您的工作基于csv,因此您应该注意可能不再存在的用户或拼写错误。
当其中一个内置参数没有你想要的属性时,-Replace
会派上用场。您需要了解您输入的哈希表使用AD的LDAP属性。
如果查看MSDN for Surname,您会看到Ldap-Display-Name为sn
。这就是为什么你得到一个错误,因为AD中不存在姓氏
答案 1 :(得分:0)
感谢您的帮助,非常好。这就是我最终的结局代码。我不得不为AD中更新的每个项重复此代码。还不得不留下-Surname -sa扔错了。再次谢谢你
IF([string]::IsNullOrEmpty($user.sn))
{
Set-ADUser -Identity $user.samaccountname -Surname $null
}else{
Set-ADUser -Identity $user.samaccountname -Surname $user.sn
}