首页 > 解决方案 > PowerShell - 更改 AD 属性时出错

问题描述

运行 PowerShell 脚本以更新用户属性。我正在使用测试用户开始,但一切似乎都符合要求。我尝试将列表文件同时作为 Excel 和 CSV 并得到相同的错误。为简单起见,我尽可能地将数据与 AD 属性匹配。我错过了一些东西,但看不到它在哪里。

Excel\CSV 数据:

在此处输入图像描述

PowerShell代码:

$users2 = import-excel "c:\orgstafflist2.xlsx"
foreach ($user in $users2) {get-aduser -filter "SamAccountName -eq '$($user.samaccountname)'" | set-aduser -displayname $($user.name) -surname $($user.last) -givenname $($user.first) -replace @{manager=$($user.manager)} -description $($user.description)}

错误信息:

set-aduser : The name reference is invalid
At line:1 char:97
+ ... ntname)'" | set-aduser -displayname $($user.displayname) -surname $($user.la ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (CN=John Doe,OU=...riese,DC=office:ADUser) [Set-ADUser], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8373,Microsoft.ActiveDirectory.Management.Commands.SetADUser

标签: powershellactive-directory

解决方案


第一个问题是您尝试使用错误名称引用的显示名称列。第二个问题是您需要为经理提供一个 AD 用户专有名称。

$users2 = import-excel "c:\orgstafflist2.xlsx"
foreach ($user in $users2)
{
    get-aduser -filter "SamAccountName -eq '$($user.samaccountname)'" |
        set-aduser -displayname $($user.displayname) -surname $($user.last) -givenname $($user.first) -replace @{manager = $(get-aduser $user.Manager).distinguishedname} -description $($user.description)
}

您还应该考虑喷溅以提高可读性。

$users2 = import-excel "c:\orgstafflist2.xlsx"
foreach ($user in $users2)
{
    $UserParam = @{
        displayname = $user.displayname
        surname = $user.last
        givenname = $user.first
        replace = @{manager = (get-aduser $user.Manager).distinguishedname}
        description = $user.description
    }
    get-aduser -filter "SamAccountName -eq '$($user.samaccountname)'" | set-aduser @UserParam
}

推荐阅读