Użytkownicy w Active Directory, posiadają zazwyczaj dość dużą liczbę dodatkowych atrybutów. Zadanie jest dość proste: uzupełnić istniejący atrybut wartością innego także już wypełnionego. Zacznijmy budowę skryptu krok po kroku…
Listujemy wszystkich użytkowników i ich wszystkie atryuty:
Get-ADUser -filter * -Properties *
Spróbujmy teraz odfiltrować ta listę znajdując użytkowników którzy określony atrybut maja pusty (wartość null/non set)
Get-ADUser -filter * -Properties mailNickname | where mailNickname -EQ $null
Założenie jest takie aby wartość atrybutu pobierać z innego (pobieramy sama wartość. bez jego nagłówka za pomocą -ExpandProperty):
Get-ADUser nazwa_uzytkownika | select samAccountName -ExpandProperty samAccountName
Znamy obiekty na których mamy dokonać zmiany, mamy dane które chcemy tam umieścić. Teraz wróćmy na chwile do tego co ma robić nasz skrypt, a ma on zmieniać wartość określonego atrybutu. Posłuży nam do tego polecenie Set-Aduser które w przypadku pojedynczego użytkownika wygląda tak:
Set-Aduser nazwa_uzytkownika -Replace @{mailNickname="wartosc_atrybutu"}
Mamy wszystkie elementy układanki czas użyć zmiennych i funkcji pętli:
$users = Get-ADUser -filter * -Properties mailNickname | where mailnickname -EQ $null
foreach($user in $users) {
$nick_name = Get-ADUser $user | select samAccountName -ExpandProperty samAccountName
Set-Aduser $user -Replace @{mailNickname="$nick_name"}
}
Skrypt mamy gotowy!