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 .