Magari non ve ne frega nulla ma io intanto prendo “appunti pubblici” (quelli che tra qualche tempo mi toccherà venire a rileggere per ripetere il trucco su una diversa macchina) :-) Vi è mai capitato di avere a che fare con account di dominio creati per puro servizio? Quegli account che stanno in piedi per tenere viva una macchina, un processo, qualcosa di assolutamente limitato per il quale non sprecare certo il vostro account o un amministratore di dominio. A me si: una banale copia (robocopy) da eseguire con un’utenza specifica autorizzata a leggere / scrivere su due domini differenti.
Fino ad oggi ho utilizzato (e vi ho spiegato un po’) la PowerShell per utilizzare al meglio il servizio Office 365 e l’amministrazione di Exchange Online ma questa in realtà può essere utilizzata (ovviamente) per fare molto altro, compreso il monitoraggio di un account utente che nel caso in cui si blocchi per troppi tentativi di password (o altro motivo non meglio specificato) può tempestivamente avvisarmi tramite mail al mio account di posta aziendale.
È un trucco relativamente semplice che si ottiene con due mosse: un’apposita operazione schedulata che parte quando viene rilevato un codice evento preciso di sistema e uno script PowerShell che ne raccoglie le informazioni e le invia (come già detto) tramite posta elettronica appoggiandosi ad un SMTP interno che non richiede autenticazione. Questo lo script che ho pubblicato su Gist:
L’operazione schedulata viene eseguita ogni volta che nel sistema si genera un errore 4771 (autenticazione non andata a buon fine) e viene chiaramente demandata ad uno dei domain controller (uno qualsiasi) del dominio dove ho creato l’utenza da tenere sotto monitor:
Se quell’evento viene tracciato dall’event viewer (Visualizzatore Eventi, nei Windows in italiano) partirà allora il mio script in PowerShell (richiamando il programma PowerShell.exe e passandogli come parametro la posizione del file LockoutAD.ps1 che sarà stato precedentemente salvato sul sistema):
Il parametro passato completo (non visibile in immagine) è un semplice -nologo -File “C:\Scripts\LockoutAD.ps1” (completo di virgolette, occhio) dove chiaramente quel C:\Scripts andrà sostituito con la reale posizione all’interno della vostra macchina / server. L’operazione andrà eseguita con privilegi elevati (si modifica il tutto dalla scheda General dell’operazione schedulata, ndr) anche nel caso in cui non ci sia nessuno collegato sulla macchina.
Il lavoro è terminato. Potete verificarne la validità e la corretta messa in produzione sbagliando volutamente la password dell’utente tenuto sotto monitor, lanciando un prompt dei comandi di test o semplicemente provando a fare login su qualsiasi macchina in dominio. Ringrazio entrambe le fonti dalle quali è partito tutto: blogs.technet.com/b/heyscriptingguy/archive/2009/04/07/how-can-i-query-event-logs-to-discover-active-directory-information.aspx e community.spiceworks.com/how_to/show/11824-email-account-lock-out-notification.
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! :-)

Se hai correzioni o suggerimenti puoi lasciare un commento nell'apposita area qui di seguito o contattarmi privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! Satispay / PayPal / Buy Me A Coffee / Patreon
[…] Powershell: Account di dominio bloccato o utilizzo di password errata? Mandami una mail con l’… […]
Ciao Gioxx. Ho provato il tuo script. Intanto complimenti per l’ottimo servizio!. Pensavo che questo script facesse la scansione di tutti gli utenti AD e mi riportasse se c’erano dei blocchi. In realtà funziona solo sostituendo nella riga 25 la variabile $AccountMonitor = ‘ACCOUNT_AD’ con il nome utente. In questo modo devo ricordarmi sempre di creare uno script x ogni utente. Esiste la possibilità di scansionare tutti gli utenti del dominio?
grazie mille in anticipo
Ciao omonimo :-)
Ovviamente la soluzione c’è, ti basterà non limitarne la query. In pratica ti basta mettere fuori gioco la verifica dell’account da tenere d’occhio (
if ($AccountMonitor -eq $LockedAccount) {
)Te la cavi con PowerShell (roba di base, davvero) oppure hai bisogno che ti mostri uno script completo che salti in pieno quel controllo di cui ti sto parlando? :-)
Ciao grazie mille
Smanettando un attimo sono riuscito. Grazie ancora per lo script!
Ottimo! :-)
Buon dì Gioxx,invece non sono pratico di PowerShell :-( potresti gentilmente mettere la parte che salta il controllo sul singolo utente e che vengano presi gli utenti del dominio o magari di un gruppo? Grazie
Non ci vuole poi molto, questo è quello modificato che non tiene conto dell’utente specificato ma che funziona con qualsiasi utente di dominio: https://gist.github.com/gioxx/79682fc5b26ff9f13ce5a47c9cf0288b