Uzupełnienie pola stanowisko we właściwościach konta użytkownika AD

We właściwościach konta AD jednym z pól jest pole stanowisko. Ręczne uzupełnienie tego pola dla kilkudziesięciu czy kilkuset użytkowników jest bardzo pracochłonne. Najlepszym rozwiązaniem jest pobranie tych danych z programu kadrowego i zaimportowanie ich do AD. Mało prawdopodobne jest aby w programie kadrowym zawarte były loginy AD czy konta e-mail ale na pewno są takie dane jak imię i nazwisko i właśnie te dane możemy wykorzystać. Nie podam rozwiązania pobrania danych z programu z programu kadrowego gdyż zależy to od używanego programu ale można to zrobić bezpośrednio z programu kadrowego jako eksport danych (o ile program posiada taką funkcjonalność) lub poprzez zapytanie SQL do bazy danych.
Po pobraniu imienia, nazwiska oraz stanowiska z programu kadrowego tworzymy plik csv z tymi danymi w postaci:

cn,Title
Jan Kowalski,Inspektor
Agata Nowak,zastępca dyrektora

Adam Kwiatkowski,kierownik

Plik musi być sformatowany jako UTF-8.
Dane imię i nazwisko powinny być zapisane w takiej samej kolejności jak w polu „cn” właściwości konta AD. Domyślnie jest to „imię nazwisko” ale jeśli ktoś dokonywał zmian w AD i zmienił to na „nazwisko imię” to musimy także dokonać odpowiednich mian w naszym pliku csv. Następnie z poziomu PowerShell-a wydajemy polecenie:

Import-Csv -Path c:\sciezka_do_pliku\nasz_plik.csv | Foreach-Object {Get-ADUser -Filter "cn -eq '$($_.cn)'" |Set-ADUser -Title $_.Title}

W przypadku gdy plik csv będzie także zawierał dane osób które nie posiadają kont w AD nie ma potrzeby usuwania tych danych. Przy imporcie zostaną one pominięte jako niemożliwe do dopasowania.

Powyższy sposób jest dobry o ile nie mamy np. 2 pracowników którzy posiadają to samo imię jak i nazwisko. Do właściwości konta użytkownika możemy także dodać numer ewidencyjny użytkownika z programu kadrowego. W późniejszym terminie w oparciu o ten numer możemy aktualizować inne dane pobrane np. z programu kadrowego. W tym przypadku 2 użytkowników posiadających to samo imię i nazwisko na pewno będą posiadać inny numer ewidencyjny. Numer ewidencyjny możemy zapisać w polu „employeeID”. Do tego celu przygotowujemy plik csv zawierający numer ewidencyjny oraz imię i nazwisko użytkownika w postaci:

employeeID,cn
18,Paweł Nowak
28,Anna Kowalska
47,Tomasz Krajewski

Uzupełnienia numerów ewidencyjnych wykonujemy poprzez wydanie polecenia:

Import-Csv -Path c:\temp\uzytkownicy.csv | Foreach-Object {Get-ADUser -Filter "cn -eq '$($_.cn)'" |Set-ADUser -employeeID $_.employeeID}

Po wykonaniu powyższych czynności możemy zweryfikować poprawność danych i uzupełnić ręcznie pola, które nie zostały uzupełnione automatycznie lub dla użytkowników posiadających takie samo imię i nazwisko. Weryfikację możemy dokonać wykonując polecenie:

get-aduser -Properties * -filter * |ft cn,employeeid,title

Weryfikację możemy ograniczyć tylko do konkretnego OU

get-aduser -Properties * -filter * -SearchBase 'OU=lokalizacja,DC=domena,DC=local'|ft cn,employeeid,title

W powyższy sposób możemy systematycznie co jakiś czas aktualizować stanowiska dla kont użytkowników AD.

W przyszłości możemy wyszukać konta użytkowników którzy nie posiadają wypełnionego pola EmplyeeID.
dla konkretnego OU:

get-aduser -Properties * -filter * -SearchBase 'OU=wydzial,DC=domena,DC=local'|Where-Object {$_.employeeid -eq $null}|ft DisplayName,DistinguishedName,employeeid

lub dla całego AD

get-aduser -Properties * -filter * |Where-Object {$_.employeeid -eq $null}|ft DisplayName,DistinguishedName,employeeid

Do uzupełnienia danych o stanowisku w oparciu o numer ewidencyjny pracownika przygotowujemy plik csv w postaci:

employeeID,cn,tittle
18,Paweł Nowak,inspektor
28,Anna Kowalska,dyrektor
47,Tomasz Krajewski
,kierowca

Importu dokonujemy poleceniem

Import-Csv -Path C:\Temp\uzytkownicy.csv |ForEach-Object {Get-ADUser -Filter "employeeid -eq '$($_.employeeid)'" |Set-ADUser -Title $_.Title}

Plik z danymi użytkowników może zawierać także inne informacje. Ważne aby pola które nas interesują miały odpowiednie nazwy w nagłówku tj. employeeID,cn,tittle