Avevo necessità di trovare rapidamente tutti gli account di dominio in scadenza al 31/12, presenti e attivi in Active Directory (on prem).
Ho dato una veloce sbirciata in Active Directory Administrative Center, salvo poi non trovare velocemente quello che mi interessava (colpa certamente mia), rinunciare e saltare a bordo di PowerShell per arrivare alla medesima conclusione.
Ti lascio qui di seguito lo script che fa esattamente ciò di cui avevo necessità, con un paio di note e possibili modifiche che potrebbero tornarti utili.
Import-Module ActiveDirectory # Definisci la scadenza account (in questo caso filtro gli account che scadranno entro il 31/12 dell'anno in corso) $oggi = Get-Date $fineAnno = Get-Date -Year $oggi.Year -Month 12 -Day 31 $utenti = Get-ADUser -Filter {Enabled -eq $true} -Property SamAccountName, DisplayName, AccountExpirationDate | Where-Object { $_.AccountExpirationDate -and $_.AccountExpirationDate -le $fineAnno } $utenti | Select-Object SamAccountName, DisplayName, AccountExpirationDate | Format-Table -AutoSize
Questo ti restituirà una tabella che propone esclusivamente gli account in scadenza (ma anche scaduti) entro il termine prestabilito nella ricerca. Vuol dire, nello specifico dello script poco sopra, che ti verranno mostrati tutti quegli account con scadenza massima 31/12 dell’anno in corso (lanciato adesso che sto pubblicando l’articolo, vuol dire già scaduti o in scadenza entro il 31/12/2024).
Se vuoi avere un elenco completo delle utenze, e non limitarti solo a quelle che hanno una data di scadenza che rispetta la tua ricerca, puoi sempre modificare il codice e renderlo un pelo meno schizzinoso:
Import-Module ActiveDirectory $utenti = Get-ADUser -Filter {Enabled -eq $true} -Property SamAccountName, DisplayName, AccountExpirationDate $utenti | Select-Object SamAccountName, DisplayName, @{Name="AccountExpirationDate"; Expression={if ($_.AccountExpirationDate) { $_.AccountExpirationDate } else { "Nessuna Scadenza" }}} | Format-Table -AutoSize
Se hai bisogno di interrogare un diverso server / dominio, ti basta aggiungere il parametro -Server contoso.com
(dove contoso.com
andrà sostituito con il dominio che vuoi realmente interrogare) da accodare alla query del Get-ADUser. Ti faccio un esempio pratico, basato sullo script che ti ho riportato qui sopra:
$utenti = Get-ADUser -Filter {Enabled -eq $true} -Property SamAccountName, DisplayName, AccountExpirationDate -Server contoso.com
Inutile forse dire che, nel caso tu volessi salvare i risultati e non mostrarli solo nella finestra di PowerShell, potrai effettuare l’esportazione in CSV semplicemente accodando un comando di Export-CSV
al termine della stringa che mostra i risultati (al posto del Format-Table -AutoSize
). Quindi, sempre basandoci sull’esempio poco sopra, la modifica dovrebbe assomigliare a questa:
$utenti | Select-Object SamAccountName, DisplayName, @{Name="AccountExpirationDate"; Expression={if ($_.AccountExpirationDate) { $_.AccountExpirationDate } else { "Nessuna Scadenza" }}} | Export-CSV C:\temp\utenti_in_scadenza.csv -Encoding UTF8 -NoTypeInformation
In caso di dubbi o suggerimenti per migliorare quanto fatto, come sempre, hai l’area commenti a tua totale disposizione :-)
#KeepItSimple
Nel frattempo, ho salvato i due snippet anche su OpenGist: gist.cerbero.cc/gioxx/0994e5b4e7a54943befb7270834d47bd.
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.