Set-ADuser: возможно ли использовать DisplayName для обновления атрибута пользователя в AD? - PullRequest
0 голосов
/ 23 марта 2020

Мне нужно обновить атрибут employeeID для ряда пользователей в AD, используя powershell. К сожалению, у меня нет их имени пользователя или samaccountname, только DisplayName. Я могу заставить пользователей использовать DisplayName в качестве фильтра, но он не работает при использовании set-aduser. Можно ли каким-то образом использовать get-aduser для получения имени samaccount, а затем использовать его для обновления пользователя с помощью 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 Ответ

1 голос
/ 23 марта 2020

Как прокомментировано, это на самом деле дубликат этого вопроса , но, поскольку там ОП не проголосовал и не принял ни один из предоставленных ответов, я не смог пометить его как дубликат.

Как уже объяснил Матиас Р. Джессен , используемый вами фильтр неправильный. Кроме того, в Set-ADUser отсутствует параметр -Filter, как в его аналоге 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"
    }
}
...