Lo script imposta o cambia massivamente la password ad una serie di utenti in Active Directory prendendo come input un file Excel con la password da impostare per ognuno. La password da impostare potrà essere una uguale per tutti oppure una password diversa per ciascun utente. 

Per eseguirlo create un file di testo, incollateci il seguente codice Powershell e salvatelo come CambiaPassword.ps1 nella cartella c:\script del vostro computer.

Per non aver problemi di esecuzione aprite la console di Powershell digitando il comando PowerShell.exe -ExecutionPolicy Unrestricted [invio] da Start/Esegui di Windows e si aprirà la seguente console:

powershell console

preparate un file Excel con due campi "email" e "password" ed inserite gli account AD e la relativa password come nel seguente esempio:

excel1

esportate il file Excel in formato CSV (MS-DOS) tramite la funzione "Salva con nome" nella cartella c:\script e salvatelo come input.csv

Assumiamo che nell'esempio il dominio si chiami dominio.test.dom che gli utenti si trovino nella Organization Unit Utenti e che il Domain Controller che utilizziamo per le modifiche si chiami dc1.dominio.test.dom

Dalla console di Powershell digitate:

cd\ [invio]
cd c:\script [invio]
.\CambiaPassword.ps1 -csvPath ".\input.csv" -ou "OU=Utenti,DC=dominio,DC=test,DC=dom" -dc "dc1.dominio.test.dom"
[invio]

al termine dello script verrà generato un LOG chiamato DataOra_Risultati_Reset_Password.csv in c:\script che conterrà i risultati del cambio password.

 
Il codice dello script è il seguente: 

Codice Script Powershell (copia/incolla):

param(
[parameter(Position=0,Mandatory=$true,ValueFromPipeline=$false,HelpMessage='CSV Path')][string]$csvPath,
[parameter(Position=1,Mandatory=$false,ValueFromPipeline=$false,HelpMessage='OU Search Base')][string]$ou,
[parameter(Position=2,Mandatory=$true,ValueFromPipeline=$false,HelpMessage='AD Domain Controller')][string]$dc
)

Import-Module ActiveDirectory

$csvData = import-csv $csvPath -Delimiter ';'
$tempdate = (get-date).tostring("dd-MM-yyyy_HHmm.ss")
$logfile = ".\"+$tempdate+"_Risultati_Reset_Password.csv"

$exporttofile = "Email,Status"
$exporttofile | out-file $logfile -append -encoding utf8

foreach ($csvUser in $csvData)
{
$inputMail = $csvUser.email
$inputPWD = $csvUser.password

if($ou){
$User = (Get-ADUser -Server $dc -Filter {mail -eq $inputMail} -Properties * -SearchBase $ou)
}
else{
$User = (Get-ADUser -Server $dc -Filter {mail -eq $inputMail} -Properties *)
}

if($User -eq $null){
Write-Host "L'utente" $csvUser.email "non esiste." -ForegroundColor Red
$exporttofile = $inputMail + "," + "ERRORE"
$exporttofile | out-file $logfile -append -encoding utf8
}
else{
$Enabled = $User.Enabled
$SAM = $User.SamAccountName
$changePWD = $User.pwdLastSet

if($Enabled){

Write-Host "L'utente" $User.name "risulta abilitato, pertanto sono state apportate le seguenti modifiche:" -ForegroundColor Yellow
Set-ADAccountPassword -identity $SAM -NewPassword (ConvertTo-SecureString $inputPWD -AsPlainText -force)
Write-Host "- Settaggio nuova password." -ForegroundColor Yellow
#Set-ADUser -identity $SAM -Enabled $True
#Write-Host "- Abilitazione utente."

if($changePwd -eq 0){
Set-ADUser -identity $SAM -ChangePasswordAtLogon $false
Write-Host "- Disabilitazione del cambio password al primo logon."
}

$exporttofile = $inputMail + "," + "ABILITATO (CON NUOVA PASSWORD)"
$exporttofile | out-file $logfile -append -encoding utf8
}
else{
Write-Host "ATTENZIONE: L'utente" $User.name "risulta disabilitato, pertanto non sono state apportate modifiche." -ForegroundColor Red
$exporttofile = $inputMail + "," + "DISABILITATO"
$exporttofile | out-file $logfile -append -encoding utf8
}
}
}

 

Nota:

Lo script non cambia password alle utenze Disabilitate e toglie il flag "Cambia password al primo accesso" ma se occorre modificare la voce ChangePasswordAtLogon impostandola su $true .