Kasutajakontode loomine domeenis

Tahan tuua mõned näited, kuidas domeenis objekte hallata skriptide abil.  Tasub vist mainida, et minu näidete töötamise eelduseks on Windows Server 2008 R2 (või 2012) haldusvahenditega kaasatuleva Powershelli mooduli ActiveDirectory olemasolu.

Alustame kasutajakonto loomisest:

#Requires –Version 2.0
#Requires –Modules ActiveDirectory

# laeme vajadusel AD mooduli
if ($Host.Version.Major -eq 2) {
  Import-Module ActiveDirectory
}

New-ADUser –Name Mari

Kogu töö teeb ära käsk New-ADUser ning uue konto loomiseks rohkem polegi vaja.  Tuleb lihtsalt tähele panna, et kuna kontole ei määratud parooli, siis on konto välja lülitatud ja seda ei saa sisse lülitada enne, kui kontole on määratud parool.  Lisaks on nii logon nimi (sAMAccountName) kui ka konto nimi mõlemad samad.  Ning ees- ja perenime pole üldse.  Selle vea saab kohe parandada:

$userParams = @{
  Name = "Kati Kallike"
  SamAccountName = "Kati"
  GivenName = "Kati"
  SurName = "Kallike"
}

New-ADUser @userParams

Kui me juba skripte teeme, siis tõenäoliselt on meil korraga rohkem kasutajaid, keda luua ning üks lihtsamaid viise kasutajaid sedasi teha on CSV faili import.  Teeme näiteks järgmise CSV faili:

GivenName,Surname,Department,SamAccountName
Mati,Maasikas,Müük,mati
Juhan,Juurikas,Juhatus,juhan

ja impordime selle:

Import-Csv c:\users.csv -Encoding Default |
  select *,
    @{name="Name"; e={"{0} {1}" –f $_.GivenName, $_.SurName }},
    @{name="DisplayName"; e={"{0} {1}" –f $_.GivenName, $_.SurName }} |
  New-ADUser

Töö on lihtne selle tõttu, et CSV failis on veergude nimed viidud kooskõlla käsu New-ADUser parameetritega (ja tuletatud pikk nimi).

Teine võimalus uuele kontole atribuute ette anda on kasutada valmis kontot kui malli.  Selleks tuleb käsule New-ADUser anda ette kasutajakonto, mille küljest olemasolevad atribuudid võtta:

$template = Get-ADUser _usertemplate -Properties City, ProfilePath, MemberOf

Import-Csv c:\users.csv |
  New-ADUser -Instance $template

Nii täidetakse atribuudid, mis sageli on erinevatel kontodel ühised.  Muuhulgas ka gruppidesse kuulumised.  Ent kuna kasutajale pole antud parooli, siis on kasutajakontod ikka veel välja lülitatud.  Parooli lisamiseks on mitu võimalust.

Parooli saab skripti käivitaja käest küsida:

#Requires –Version 2.0
Read-Host -AsSecureString -Prompt "Ütle üks ilus parool"

(Get-Credential -Message "Ütle üks ilus parool" -UserName kasutaja).Password

Samas saab parooli ka näiteks tekstifailist (või parooligeneraatorist) lugeda:

ConvertTo-SecureString -String (Get-Content c:\parool.txt) -AsPlainText -Force

Paneme parooli lisamise eelnevale skriptile otsa:

#Requires –Modules ActiveDirectory

Import-Csv c:\users.csv |
  New-ADUser -AccountPassword (Get-Credential -UserName kasutaja).Password -Enabled $true

Nii saab kasutajakontod ka kohe sisse lülitada.  Samas on võib-olla hea mõte enne kasutajale parooli määramist välja mõtelda, kuidas parool kasutajani toimetada.  Ja las ta niikaua olla välja lülitatud ning ilma paroolita.

Loome nüüd uued kasutajad kindlasse OU-sse ning paneme nad ka gruppi :

#Requires –Modules ActiveDirectory
$rootdn = (Get-ADDomain).DistinguishedName

Import-Csv c:\users.csv |
  New-ADUser -PassThru -Path "ou=uued,ou=kasutajad,$rootdn" |
  Add-ADPrincipalGroupMembership -MemberOf "kõik töötajad"

Kui me nüüd mõne aja pärast avastame, et mõned atribuudid jäid kohe paika panemata, siis tuleb seda teha hiljem. Ja käsk Set-ADUser ei ole enam nii vastutulelik ning ei ole nõus otse torust muudetavaid väärtusi lugema.  Lisaks ei ole kõikide kasutajakonto atribuutide jaoks ka eraldi käsureavõtit. Siin tuleb natuke kavaldada. Loome kõigepealt sobiva CSV faili:

id, email, parool
mati,"mati@firma.ee",Par0ol33
"cn=Juhan Juurikas,ou=kasutajad,dc=firma,dc=ee","juhan@firma.ee",pAro0like

ja siis anname selle käsule ette. Tasub tähele panna, et parameeter -Add lubab lisada mistahes konto atribuute – tuleb vaid teada nende atribuutide LDAP-nimesid (need erinevad graafilise kasutajaliideses ja Powershellis kasutatavastest nimedest):

Import-Csv c:\modify.csv | ForEach-Object {
  Set-ADUser -Identity $_.id -Add @{mail=$_.email}
}

Sama lugu on parooli tagantjärele muutmise ja kontode avamisega:

Import-Csv c:\modify.csv | ForEach-Object {
  Set-ADAccountPassword -Identity $_.id `
                        -Reset `
                        -NewPassword (ConvertTo-SecureString -AsPlainText -Force $_.parool) `
                        -PassThru |
  Enable-ADAccount
}

Käsurea atribuudi -Reset kasutamine eeldab, et skripti käivitaval kasutajakontol on õigus muuta teiste kasutajate paroole. Kui skriptiga tahetakse muuta kasutaja enda õigustes tema parooli, siis tuleb see asendada atribuudiga -OldPassword (ja lisada kehtiv parool).

Advertisements