Kontode muutmine domeenis

Vahel on vaja korraga paljusid domeenikontosid muuta.  Näiteks vahetus osakonna juht ja nüüd oleks vaja kõikide osakonna töötajate kontodel juhi atribuut ära muuta:

#Requires -Version 3.0
#Requires -Modules ActiveDirectory

$vana = Get-ADUser "Mihkel Metsik"
$uus = Get-ADUser "Leila Liblikas"

Get-ADUser -Filter {Manager -eq $vana.DistinguishedName} |
  Set-ADUser -Manager $uus

Tasub tähele panna, et kasutajate otsimisel tuleb ette anda konto atribuut DistingushedName, aga uue juhi määramisel on vaja juhi kasutajakontot.

Natuke keerulisemaks läheb asi siis, kui muutmise käigus tuleb igale kontol midagi unikaalset muuta.  Näiteks võib juhtuda, et meil tuleb muuta ära kasutaja atibuut DisplayName.  Kui seni oli see kujul “eesnimi perenimi”, siis nüüd tahaks seda kujul “perenimi, eesnimi”.  Ja teeme seda ainult Hiina töötajatega.  Antud juhul ei saa enam nii lihtsalt läbi kui eelmisel korral:

Get-ADUser -Filter {country -eq "cn"} |
  ForEach-Object {
    Set-ADUser -Identity $_.sid -DisplayName (
      "{1}, {0}" -f $_.GivenName, $_.SurName
    )
  }

Natuke rohkem tööd on ka siis, kui me peaksime muutma kasutajakontode logon nimesid.  Koostame logon nime nii, et võtame eesnimest 5 tähte ja perenimest 2.  Ning võtame seekord ainult ühe grupi liikmed.

Grupi liikmed võivad olla nii kasutajad, arvutid, kui ka teised grupid.  Meie aga tahame vaid kasutajaid.  Lisaks on veel probleem sellega, et Get-ADGroupMember tagastab vale tüüpi objekti, millel pole ees- ja perenime küljes:

Get-ADGroupMember "meie" |
  Where-Object {$_.objectClass -eq "user"} |
  Get-ADUser |
  ForEach-Object {
    $uusnimi = (
      "{0}{1}" -f $_.GivenName.Substring(0,5), $_.SurName.Substring(0,2)
    )
    if (-not (Get-ADUser $uusnimi)) {
      Set-ADUser -Identity $_.sid -SamAccountName $uusnimi
    }
  }

Kontonimede muutmisel tuleb arvestada, et atribuudil SamAccountName on peal 20 märgi piirang ja pikema teksti sisestamiskatsel saame veateate. Samuti tuleks arvestada, et mainitud atribuut peab olema domeeni piires unikaalne ja seetõttu kontrollime, et sellise nimega kasutajat juba olemas ei oleks. Jääb veel võimalus, et sama nime kannab mõni arvuti või grupp, aga seda me siin ei kontrolli. Samuti jääb juba sellise nimega kasutaja olemasolu korral kasutaja logon nimi muutmata.

Juhul kui iga muudetud väärtus on ette teada ja seda ei saa välja arvutada, siis aitab hädast välja juba varem kirjeldatud CSV faili import.  Vaja vaid, et CSV failis olesid õigete nimedega veerud:

Import-Csv c:\modify.csv |
  ForEach-Object {
    Set-ADUser -Identity $_.id -MobilePhone $_.mobile
  }

Ühe liigutuse võiks veel teha.  Nimelt kui meil on rühmapoliitika korralikult juurutatud, siis ei ole kasutajatel enam vaja personaalseid logon skripte.  Korjame need ära:

Get-ADUser -Filter * |
  Set-ADUser -Clear ScriptPath

Kui ülaltoodud näidetest jääb väheks, siis TechNetis on näiteid veel.  Need on küll pärit Server 2008 R2 ajast, aga töötavad ka uuemate ActiveDirectory moodulitega.

Advertisements