Trova gli utenti di Active Directory con password scaduta (PowerShell)

Trova gli utenti di Active Directory con password scadute (PowerShell). Sei responsabile della gestione delle password nel tuo ambiente di Active Directory (AD)? Un compito cruciale è identificare gli utenti il cui password è scaduto, poiché questi utenti non saranno più in grado di accedere ai loro account fino a quando non reimposteranno le loro password. Questo articolo ti mostra come utilizzare efficientemente PowerShell per trovare gli utenti di Active Directory con password scadute.

Cominciamo il nostro articolo sul blog su Come Trovare Utenti di Active Directory con Password Scadute (PowerShell).

Trova gli Utenti di AD con Password Scadute Usando PowerShell

Seguendo questo articolo si risparmia tempo e sforzi, poiché ci permette di individuare rapidamente utenti specifici per notifiche di reset della password o di scadenza. Sia che tu sia un amministratore di rete o semplicemente desideri migliorare la sicurezza del tuo ambiente Active Directory, questa guida fornisce le informazioni necessarie per iniziare.

Prerequisiti

Se intendiamo seguire questo articolo, avremo bisogno di quanto segue:

  • A Windows computer joined to an Active Directory domain.
  • Modulo ActiveDirectory installato sul computer.
  • Il computer deve inoltre avere almeno Windows PowerShell 5.1 o superiore.

Trovare Utenti in Active Directory

Prima di reimpostare una password utente, dobbiamo prima individuare l’account. Di conseguenza, il nostro primo passo dovrebbe essere determinare se esiste una riserva. Per farlo, eseguire il cmdlet Get-ADUser con il parametro Identity impostato sul nome dell’account.

Il parametro Identity accetta uno dei quattro identificatori: nome distinto (DN), GUID (objectGUID), ID di sicurezza (objectSID), o nome dell’account SAM (SAMAccountName).

Ad esempio, se richiediamo di reimpostare la password per un utente specifico, dovremmo prima verificare che l’utente esista prima di emettere un reset dell’account. Per farlo, copiare il seguente comando e incollarlo nella nostra console PowerShell. Assicurarsi di cambiare prima il nome utente con quello corretto:

Get-ADUser -Identity

Il comando restituisce le proprietà dell’utente, come mostrato nello screenshot qui sotto, confermando che l’account esiste e il nome utente è corretto:

Ricerca degli utenti con password scaduta in AD

Possiamo ottenere rapidamente la data di scadenza della password per un singolo utente aggiungendo e utilizzando l’attributo `msDS-UserPasswordExpiryTimeComputed` con il comando `Get-ADUser`:

Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'

Ma questa riga di codice produrrà un output non leggibile per gli esseri umani, quindi dobbiamo aggiungere la seguente riga per convertire i risultati in un formato leggibile. Per aggiungere la riga seguente, utilizzeremo il comando `Select-Object` -Property su una nuova pipeline di PowerShell:

Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}

Eseguendo lo stesso attributo, `msDS-UserPasswordExpiryTimeComputed`, con il filtro corretto, otteniamo una lista degli account di Active Directory e i relativi tempi di scadenza delle password:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

Miglioriamo lo script sopra esportando la lista degli utenti in un file di testo che potremmo utilizzare in seguito. Per fare ciò, possiamo utilizzare il comando `Out-File` che invierà l’output a un file di testo:

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt

Lo script sopra genera un file chiamato userslist.txt che possiamo utilizzare successivamente. Abbiamo inoltre omesso la proprietà ExpiryDate dall’output poiché abbiamo bisogno solo degli ID utente degli account scaduti. Utilizziamo questa lista per la remediation di massa, di cui si discute più avanti nell’articolo.

Reset della password utente di Active Directory

Ora che abbiamo imparato come utilizzare Get-ADUser per verificare un account utente, sappiamo che il risultato è valido e che l’ID utente esiste. Dobbiamo ora utilizzare il cmdlet Set-ADAccountPassword per reimpostare la password dell’utente.

Il comando Set-ADAccountPassword cambia la password di un utente se forniamo la vecchia password. Se non abbiamo la vecchia password, il cmdlet la reimposta con il parametro Reset.

La nuova password generata casualmente è una password casuale di 14 caratteri con cinque caratteri non alfanumerici. Per eseguire, apri una finestra PowerShell, copia il codice, incollalo in PowerShell e premi Invio:

$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
  • Riga 1: Specifica il nome utente di cui reimpostare la password. Assicurati di sostituire la stringa USERNAME con l’effettivo ID utente.
  • Riga 2: Importa la classe oggetto assembly .NET System.Web.
  • Riga 3: Genera una password casuale lunga 14 caratteri con cinque caratteri non alfanumerici.
  • Riga 4: Converte la password in testo normale in un oggetto password sicura.
  • Riga 5: Agevola la reimpostazione della password.
  • Riga 6: Impone all’account AD di cambiare la password al prossimo accesso.
  • Riga 7: Mostra la nuova password nella console. Tuttavia, non raccomandiamo questo per motivi di sicurezza. La riga 6 si occupa del cambiamento della password secondo le preferenze dell’utente ed è considerata la prassi migliore per questa procedura.

Migliora la sicurezza del tuo Active Directory e di Azure AD

Provalo gratuitamente, Accesso a tutte le funzionalità. – Sono disponibili più di 200 modelli di rapporto AD. Personalizza facilmente i tuoi rapporti AD.




Scrivere lo strumento di reimpostazione della password di Active Directory

Ora abbiamo uno script che usiamo per reimpostare la password di un utente. Il prossimo passo è trasformare il nostro script in uno strumento. Uno strumento riutilizzabile esegue le stesse azioni con il minimo intervento manuale dell’utente.

Nel costruire uno strumento, un aspetto cruciale è che chiunque esegua lo strumento non debba modificare il codice ogni volta. Purtroppo, il nostro codice richiede ancora all’utente di modificare la variabile $username.

Invece di consentire ai nostri utenti di modificare i valori manualmente, perché non scrivere uno script che accetta parametri? Per farlo, segui questi passaggi:

  1. Apri Windows PowerShell ISE.
  2. Crea un nuovo file PowerShell e salva il file con il nome Reset-ADPassword.ps1. Salva lo script nella posizione preferita. Questo articolo salva il file nella cartella C:\PS\scripts .
  3. Copia e incolla il codice seguente nel nostro editor di script prima di salvare lo script.
param (
     $username
 )

 if (-not($username)) {
     Write-Host "Username not found. Exiting script"
     return $null
 }

 try {
     $null = Get-ADUser -Identity $username -ErrorAction Stop
 } catch {
     Write-Host $_.Exception.Message
     return $null
 }

$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force

 try {
     Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
     Set-ADuser -Identity $username -ChangePasswordAtLogon $true

     [pscustomobject]@{
         Username = $username
         NewPassword = $randomPassword
     }
 } catch {
     Write-Host "There was an error performing the password reset. Please find additional information below."
     Write-host $_.Exception.Message
     return $null
 }
  • Linea 1: Aggiunge un parametro chiamato username.
  • Linea 5: Controlla se l’utente ha fornito un valore per il nome utente. Il blocco if mostra anche un messaggio ed esce dal script se la condizione è soddisfatta.
  • Linea 10: Controlla se il nome utente è valido o meno.
  • Linea 12: Verifica se il nome utente è invalido. Mostra un messaggio e interrompe l’esecuzione dello script.
  • Linea 17: Genera una password casuale che è lunga 14 caratteri con cinque caratteri non alfanumerici.
  • Linea 18: Converte la password in chiaro in un oggetto password stringa sicura.
  • Linea 20: Permette il reset della password.
  • Linea 22: Impone all’account AD di cambiare la password al prossimo accesso.
  • Linea 24: Mostra la nuova password nella console. Tuttavia, non lo consigliamo per motivi di sicurezza. La linea 6 si occuperà del cambio password secondo il gusto dell’utente e viene considerato la migliore pratica per questa procedura.
  • Linea 28: Mostra un messaggio di errore se il reset non è riuscito.

Esempi di esecuzione dello strumento di reimpostazione della password AD

A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.

Reimpostazione della password di un singolo utente

Supponiamo di dover reimpostare la password di un utente. Innanzitutto, esegui lo strumento di reimpostazione della password di Active Directory e specifica quale nome utente mirare. Ad esempio, per reimpostare la password di un singolo utente, esegui lo script come mostrato di seguito:

.\Reset-ADPassword.ps1 -username USERNAME

Di conseguenza, lo script reimposta la password e la visualizza sullo schermo. Ad esempio, questa uscita invia la nuova password all’utente interessato:

Reimpostazione della password di più utenti

Fortunatamente, possiamo scorrere un elenco in PowerShell utilizzando gli array e il ciclo foreach. Inoltre, il ForEach-Object cmdlet in PowerShell ci consente di elaborare più elementi contemporaneamente. Questo cmdlet ci consente di passare vari elementi attraverso il pipeline.

Per reimpostare le password di più utenti, crea un array con due o più nomi utente. Gli elementi dell’array vengono quindi passati attraverso il pipeline, dove il comando ForEach-Object di PowerShell esegue lo strumento di reimpostazione della password su ciascun nome utente.

@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

Tuttavia, miglioriamo questo se remediamo a più di due account utente. Ricorda il file di testo che abbiamo generato in precedenza? Lo utilizziamo in questa sezione.

Dobbiamo leggere il file di testo contenente gli account utente e eseguire lo strumento di reset della password AD su ciascuno di essi. Per farlo, utilizzare il cmdlet Get-Content per importare il contenuto del file di testo in PowerShell. Dopo di ciò, lo script invia i dati al pipeline ed esegue lo script di reset della password AD su ciascun account.

Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}

Dopo l’esecuzione del frammento sopra riportato, avremo reimpostato più password utente in un’unica esecuzione.

Grazie per aver letto l’articolo blog Trova utenti di Active Directory con password scaduta (PowerShell). Lo concluderemo ora.

Trova utenti AD con password scadute PowerShell Conclusione

In conclusione, il recupero degli utenti di Active Directory con password scadute tramite PowerShell è un processo semplice che risparmia tempo e fatica. Utilizzando il comando Get-ADUser e filtrando gli utenti con password scadute, è possibile identificare e rivolgersi rapidamente agli utenti specifici per il reimpostazione della password o per le notifiche di scadenza. Questo comando è utile per organizzazioni con un grande numero di utenti, in quanto consente di gestire proactivemente la scadenza delle password e ridurre il rischio di intrusioni.

Visitiamo anche la nostra sezione di blog su Active Directory e la sezione di PowerShell per leggere ulteriore contenuto.

Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/