Set-ADuser:是否可以使用DisplayName更新AD中的用户属性?

时间:2020-03-23 11:54:52

标签: powershell active-directory

我需要使用powershell为AD中的许多用户更新属性employeeID。不幸的是,我没有他们的用户名或samaccountname,只有DisplayName。我可以使用DisplayName作为过滤器来吸引用户,但使用set-aduser时不起作用。有什么方法可以使用get-aduser来获取samaccountname,然后通过set-aduser来使用它来更新用户吗?

此外,请注意,脚本不要覆盖任何现有值,这一点很重要。

我当前的(非功能性)脚本:

$csv = Import-Csv c:\test\users.csv

foreach ($line in $csv) {
    $ADUserObject = Get-ADUser -Filter "DisplayName -eq '$line.displayname'" -Properties employeeID 
    if ($null -eq $ADUserObject.EmployeeID) {
    Set-ADUser -Filter "DisplayName -eq '$line.displayname'" -employeeID $line.employeeid
    }
}

CSV文件如下所示:

employeeid,GivenName,Surname,displayname
489900,Angela,Davis,Angela Davis

感谢任何输入或建议,谢谢!

1 个答案:

答案 0 :(得分:1)

如上所述,实际上这是this question的副本,但是由于该操作,OP没有投票或接受任何给定的答案,因此我无法将其标记为副本。

正如Mathias R. Jessen所述,您使用的过滤器是错误的。另外,-Filter上没有Set-ADUser参数,与其对应的Get-ADUser一样。

这应该做您想要的:

Import-Csv -Path 'c:\test\users.csv' | ForEach-Object {
    $ADUserObject = Get-ADUser -Filter "DisplayName -eq '$($_.displayname)'" -Properties DisplayName, employeeID -ErrorAction SilentlyContinue
    if ($ADUserObject) {
        # check if this user already has an EmployeeId filled in
        if ($ADUserObject.EmployeeID) {
            Write-Host "User $($ADUserObject.DisplayName) already has EmployeeId $($ADUserObject.EmployeeID)"
        }
        else {
            Write-Host "Setting EmployeeID $($ADUserObject.EmployeeID) for user $($ADUserObject.DisplayName)"
            $ADUserObject | Set-ADUser -EmployeeID $_.employeeid
        }
    }
    else {
        Write-Warning "User $($_.DisplayName) could not be found"
    }
}