Talvolta mi trovo a dover creare o modificare molti utenti
in una sola volta e… lo sapete come sono fatto: mi piace farlo con uno script.
Powershell (il modulo activedirectory di amministrazione)
offre moltissimi comandi utili e pronti da usare, oltre alla sua sintassi
veramente semplice…
Ecco quindi di seguito come creare un set di utenti in un
unico comando, partendo da un elenco CSV che potete facilmente creare da un Excel xlsx oppure da un elenco di nomi e cognomi che magari avete ricevuto via mail.
Riassumo la metodologia utilizzata
- Creare un file CSV degli utenti con i dettagli.
- Creare un file CSV con nome utente e nuova password
- Utilizzare powershell per importare i files CSV in oggetti
- Lanciare lo script per creare le utenze
- Lanciare lo script per cambiare le password e riabilitare le utenze
...e cosa impareremo leggendo questo articolo:
- Creare una serie di utenti di dominio da un elenco CSV (comma separated values)
- Cambiare la password a più utenti Active Directory da un elenco CSV
- Importare un elenco CSV in una variabile Powershell
- Importare il modulo di amministrazione di Active Directory in Powershell
- Alcune regular expression con Notepad++
... ed ora spiego tutto:
1.
Creare un file CSV degli utenti con i dettagli
Partiamo dalla “base dati”: avremo bisogno di un elenco che
ci dica al minimo nome, cognome e nome utente da creare…
cognome;nome;nomeSAM;descrizione
Rossi;Mario;MarioR_cons;"Questo testo sarà in
descrizione";
Bianchi;Guido;GuidoB_cons;"Questo testo sarà in
descrizione";
Verdi;Giovanni;GiovanniV_cons;"Questo testo sarà in
descrizione";
Castelli;Diego;DiegoC_cons;"Questo testo sarà in
descrizione";
Pompilio;Numa;NumaP_cons;"Questo testo sarà in
descrizione";
Stilio;Tullio;TullioS_cons;"Questo testo sarà in
descrizione";
Marzio;Anco;AncoM_cons;"Questo testo sarà in
descrizione";
Prisco;Tarquinio;TarquinioP_cons;"Questo testo sarà in
descrizione";
Tullio;Servio;ServioT_cons;"Questo testo sarà in
descrizione";
Superbo;Tarquinio;TarquinioS_cons;"Questo testo sarà
in descrizione";
Come creare un file CSV da un semplice elenco di nomi e cognomi (una mail)
Se avete ricevuto una mail con un elenco di nomi e cognomi è
possibile arrivare velocemente ad un file CSV con delle regular expressions con
notepad++
Ecco la regular expression da inserire nel campo “Trova” e
la stringa da inserire nel campo “Sostituisci con” :
Trova: ^([^\s]*)[\s]([\w]{1})([^\s]*)
Sostituisci con: \2\3;\1;\1\2_cons;"Questo testo sarà in descrizione"
NOTA: Per gli utenti che ho dovuto creare io, la nomenclatura del
nome utente doveva essere:
Ad esempio: MarioR_cons
Sicchè ho creato la regular expression perché ci desse in
output un elenco CSV con le colonne giuste.
2.
Creare un file CSV con nome utente e nuova
password
Qui le ho messe con gli asterischi...
nomeSAM;password
MarioR_cons;**************
GuidoB_cons;**************
GiovanniV_cons;**************
DiegoC_cons;**************
NumaP_cons;**************
TullioS_cons;**************
AncoM_cons;**************
TarquinioP_cons;**************
ServioT_cons;**************
TarquinioS_cons;**************
Ma perché un CSV diverso?
Il motivo è molto semplice: nel mio esempio ho fatto
generare le password ad un programma (Keepass) ed ho quindi ottenuto, infine,
un CSV con le password generate secondo la mia regola personalizzata (magari
scriverò un articolo su come si fa).
Inoltre, così ho l’opportunità anche di spiegare come si
cambiano le password a molti utenti in una volta sola con uno script!
Se invece avete un elenco che già contiene anche le
password, vi basterà ignorare questo passaggio ed agguingere, al primo comando
(New-AdUser), in fondo:
-AccountPassword (convertto-securestring
-asPlainText $_.password -Force)
Sempre che la colonna del vostro CSV contenente la password
si chiami, appunto “password”
3.
Utilizzare powershell per importare i files CSV
in oggetti
In powershell è possibile ottenere una variabile “oggetto” da
un file CSV in modo molto semplice.
Apriamo direttamente la powershell (non è necessario
scomodare un file .ps1 per operazioni semplici…)
“Carichiamo” quindi i nostri dati dai nostri files così:
$a =
import-csv ".csv" -Delimiter
";"
$b =
import-csv ".csv" -Delimiter
";"
Dove ovviamente sostituirete con
i percorsi completi dei vostri 2 file.
Importiamo anche una semplice variabile di testo che
contiene il nome del nostro dominio, ci verrà utile in seguito:
$domainName =
"miodominio.local"
… inoltre, SE VOGLIAMO specificare il percorso della OU nella
quale creare le utenze in Active Directory, possiamo specificarlo con
$OUpath =
"CN=nomeOU,DC=miodominio,DC=local"
Dove, ovviamente, il valore va sostituito con il
DistinguishedName della OU in Active Directory (potete recuperare il valore da “Utenti
e Computer di Active Directory” (dsa.msc) abilitando la visualizzazione
avanzata e visualizzando la scheda “Editor Attributi” nelle proprietà della OU.
IMPORTANTE: prima
di procedere ad operare su Active Directory da Powershell (oltre ovviamente
alle raccomandazioni di fare attenzione e che lo fate a vostro rischio e
pericolo, che sono d’obbligo) è necessario importare il corretto modulo di
amministrazione dentro la sessione powershell.
Se state lanciando powershell dal Domain controller, non
avrete nessun problema.
Se state lanciando powershell dal vostro PC, dovreste aver
già installato i “Remote
Server Administration Tools” di Microsoft: una serie di strumenti di base per
amministrare la vostra infrastruttura server (DHCP, DNS, Active Directory, ….)
direttamente dal vostro PC.
Inoltre dovreste aver lanciato
la powershell con un account che ha i
diritti di amministratore di dominio (o al minimo i diritti che servono per
creare utenze).
Per importare il modulo di amministrazione Active Directory,
lanciate quindi il comando:
import-module activedirectory
4.
Lanciare lo script per creare le utenze
Una volta importato il modulo activedirectory avremo a
disposizione i comandi che ci servono. Lanciamo quindi (anche copiando e
incollando):
$a | foreach {
New-ADUser -Name ($_.cognome + " " + $_.nome ) -GivenName $_.nome -Surname $_.cognome -SamAccountName $_.nomeSAM -UserPrincipalName
($_.nomeSAM+"@"+$domainName) -Path $OUpath -Description (""+$_.description)
}
Lo script
creerà le utenze DISATTIVATE nella
OU di destinazione, senza specificare una password.
Varianti
Se avete già specificato la password in una colonna “password” del primo
elenco CSV
Aggiungete la parte
-AccountPassword (convertto-securestring
-asPlainText $_.password -Force) -Enabled $true
Così:
$a | foreach {
New-ADUser -Name
($_.cognome
+ " " + $_.nome ) -GivenName
$_.nome -Surname
$_.cognome -SamAccountName
$_.nomeSAM -UserPrincipalName
($_.nomeSAM+"@"+$domainName) -Path $OUpath -Description (""+$_.description) -AccountPassword (convertto-securestring -asPlainText $_.password -Force) -Enabled $true
}
In questo caso, non avrete bisogno della parte 5.
Se NON volete specificare la OU in cui creare le utenze
Rimuovete -Path $OUpath
$a | foreach {
New-ADUser -Name ($_.cognome + " " + $_.nome ) -GivenName $_.nome -Surname $_.cognome -SamAccountName $_.nomeSAM -UserPrincipalName
($_.nomeSAM+"@"+$domainName) -Description (""+$_.description)
}
5.
Lanciare lo script per cambiare le password e
riabilitare le utenze
Ora vediamo anche come
cambiare la password a più utenti contemporaneamente partendo da un elenco CSV.
Nell’elenco numero 2, ci sono solo 2 colonne: nome utente e
nuova password da impostare. Il nome utente è quello che ci permette di capire a
quale utente cambiare la password, ovviamente.
Lanciamo quindi il comando:
$b | foreach{
Set-ADAccountPassword $_.nomeSAM -newPassword (convertto-securestring -asPlainText $_.password -Force)
set-AdUser $_.nomeSAM -Enabled $true
}
La prima riga è per cambiare la password, la seconda per riabilitare
l’utente (inizialmente creato disabilitato)
6. Ricapitoliamo
- Abbiamo creato dei files CSV contenenti uno i dettagli dell’utente da creare, l’altro la corrispondenza username - nuovapassword.
- Li abbiamo importati in due variabili powershell e abbiamo anche definito 2 variabili “stringa” per alcuni dettagli comuni
- Abbiamo importato il modulo di amministrazione AD in powershell
- Abbiamo creato le utenze senza password
- Abbiamo cambiato la password e abilitato le utenze
7. Script completo
Una volta che avete i due files CSV potete anche copiare e
incollare questo script (ricordandovi di cambiare i percorsi dei files) dentro
una powershell…
… o metterlo in un file .ps1 e farlo girare
$a = import-csv ".csv" -Delimiter ";"
$b = import-csv ".csv" -Delimiter ";"
import-module activedirectory
$domainName = "miodominio.local"
$OUpath = "CN=OUName,DC=miodominio,DC=local"
# creiamo gli utenti dal file (colonne cognome;nome;nomeSAM;descrizione)
$a | foreach {
New-ADUser -Name ($_.cognome + " " + $_.nome ) -GivenName $_.nome -Surname $_.cognome -SamAccountName $_.nomeSAM -UserPrincipalName
($_.nomeSAM+"@"+$domainName) -Path $OUpath -Description (""+$_.description)
}
# Cambiamo le pw e riabilitiamo (colonne nomeSAM;password)
$b | foreach{
Set-ADAccountPassword $_.nomeSAM -newPassword (convertto-securestring -asPlainText $_.password -Force)
set-AdUser $_.nomeSAM -Enabled $true
}
BUONO
SCRIPTING A TUTTI!!!