PowerShell: cercare utenti senza scadenza password in AD

| |

Avevo necessità di individuare facilmente alcuni dati riguardanti degli utenti di dominio, in particolare la scadenza del loro account, l’ultima volta che si sono connessi al dominio e il parametro “Never expire” della password. Avevo già un elenco di utenze in un foglio Excel e mi sarebbe bastato un CERCA.VERT per completare l’opera, quindi ho adoperato PowerShell per ottenere solo ciò che mi interessava.

La lista dei nomi utente (SAMAccountName) l’ho salvata in un file CSV (utenti.csv), colonna unica, intestazione – banalmente – “utente“. A questo punto lo script non farà altro che attaccarsi a un domain controller del mio dominio (nell’esempio contoso.com), scorrere i nomi utente e tirare fuori (mettendo in tabella, a video, senza salvare il risultato su file stavolta) nome utente (è una ripetizione, lo so, ma serve per far funzionare bene il CERCA.VERT successivamente in Excel), Nome, Abilitazione (se l’account è abilitato o disabilitato su AD), scadenza password (se attivata o no) e ultima data di connessione (con orario) al dominio.

Questo è lo script:

$dc = Get-ADDomainController -DomainName contoso.com -Discover -NextClosestSite

$UserAttributesList = @()
Import-CSV "utenti.csv" | ForEach-Object { 
$UserAttributesList += Get-ADUser -Server $dc.HostName[0] -Filter "SamAccountName -eq '$($_.utente)'" -Properties SamAccountName, Name, enabled, PasswordNeverExpires, lastLogon | select samaccountname, name, enabled, PasswordNeverExpires, @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}}
}
$UserAttributesList | Out-GridView

Attenzione però, come giustamente mi ha fatto notare Paolo (ciao!) il campo lastLogon potrebbe non restituire il valore corretto nel caso in cui un’utenza non effettui un login interattivo (classico comportamento di un PC inserito in dominio al quale ci si collega autenticandosi con l’utenza Active Directory).

Per questo motivo è assolutamente sensato prendere in esame il campo lastLogonTimestamp alla stessa maniera (e con la stessa conversione per mostrarlo in tabella in maniera leggibile). Se vuoi puoi anche tirare fuori la data di scadenza applicata a un account, utile da mandare “in coppia” per chi non ha la proprietà PasswordNeverExpires attiva:

$dc = Get-ADDomainController -DomainName contoso.com -Discover -NextClosestSite

$UserAttributesList = @()
Import-CSV "utenti.csv" | ForEach-Object { 
$UserAttributesList += Get-ADUser -Server $dc.HostName[0] -Filter "SamAccountName -eq '$($_.utente)'" -Properties SamAccountName, Name, enabled, PasswordNeverExpires, LastLogonTimestamp, accountExpires | select samaccountname, name, enabled, PasswordNeverExpires, @{Name='LastLogonTimestamp';Expression={[DateTime]::FromFileTime($_.LastLogonTimestamp)}}, @{Name='accountExpires';Expression={[DateTime]::FromFileTime($_.accountExpires)}}
}
$UserAttributesList | Out-GridView

Dubbi? L’area commenti è qui sotto a tua totale disposizione :-)

#StaySafe


Immagine di copertina: bleepstatic.com
fonti:
shellgeek.com/get-aduser-samaccountname
shellgeek.com/powershell-get-aduser-last-logon

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Pillole

Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato agli articoli "a bruciapelo"!
Se vuoi leggere le altre pillole fai clic qui.

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments