Punti chiave
- PowerShell per l’efficienza: Utilizza PowerShell per identificare rapidamente gli account bloccati negli ambienti Windows.
- Esclude Azure AD: Lo script non tratta gli account di Azure AD, concentrandosi esclusivamente sugli account locali e dei controller di dominio.
- Rilevamento specifico per l’ambiente: Il suo approccio varia a seconda che sia eseguito su un controller di dominio o su una workstation.
- Output personalizzabile: Offre flessibilità nel formato di output, consentendo l’esportazione in file CSV e TXT.
- Capacità di filtraggio degli utenti: Se necessario, può rivolgersi a utenti specifici, migliorando la sua precisione.
- Automatico piuttosto che manuale: Rappresenta un’alternativa efficiente ai metodi di controllo manuale degli account.
- Indicativo di problemi più ampi: Gli account bloccati possono essere un segnale di problemi di sicurezza o operativi più ampi.
- Accessibile ai principianti: È facile da usare per chi ha una conoscenza di base di PowerShell, ma è comunque personalizzabile per gli utenti avanzati.
- Si raccomanda un monitoraggio regolare: Da utilizzare come parte di una strategia di monitoraggio regolare degli account.
- Rafforzato con NinjaOne: La funzionalità dello script integra gli strumenti di gestione completa dell’IT di NinjaOne.
Nel panorama in continua evoluzione della sicurezza informatica, la gestione degli account utente rimane una pietra miliare per la salvaguardia di sistemi e dati. Un aspetto fondamentale è il monitoraggio e la gestione degli account bloccati, un problema comune negli ambienti IT dinamici e di grandi dimensioni. Con PowerShell, gli amministratori possono rilevare gli account bloccati in Windows in modo efficiente, garantendo la continuità aziendale e la sicurezza.
Background
Lo script PowerShell fornito si presenta come uno strumento vitale per i professionisti IT e i Managed Service Provider (MSP). La sua funzionalità principale è quella di identificare gli account bloccati in un ambiente Windows, esclusi gli account Azure AD. Tale funzionalità è importante per mantenere l’efficienza operativa e la sicurezza, poiché gli account bloccati possono essere sia un sintomo di errore dell’utente sia un potenziale indicatore di violazioni della sicurezza.
Lo script:
<# .SYNOPSIS This script will see if any accounts on a local machine or on a domain controller are locked out. You can optionally export this information into a custom field. Does NOT check Azure AD Accounts. .DESCRIPTION This script will see if any accounts on a local machine or on a domain controller are locked out. You can optionally export this information into a custom field. Does NOT check Azure AD Accounts. .EXAMPLE (No Parameters but ran on a DC) SamAccountName LastLogonDate PasswordExpired Enabled -------------- ------------- --------------- ------- user 4/20/2023 1:09:23 PM False True .EXAMPLE (No Parameters but ran on a Workstation) Name Domain LocalAccount Disabled ---- ------ ------------ -------- user TEST False False PARAMETER: -ExportTXT "ReplaceMeWithAnyMultiLineCustomField" Name of a multi-line customfield you'd like to export the results to. .EXAMPLE -ExportTXT "ReplaceMeWithAnyMultiLineCustomField" Name Domain LocalAccount Disabled ---- ------ ------------ -------- user TEST False False PARAMETER: -ExportCSV "ReplaceMeWithAnyMultiLineCustomField" Name of a multi-line customfield you'd like to export the results to. .EXAMPLE -ExportCSV "ReplaceMeWithAnyMultiLineCustomField" Name Domain LocalAccount Disabled ---- ------ ------------ -------- user TEST False False .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 7, Windows Server 2008 Release Notes: Renamed script, added Script Variable support, added support for showing results of only 1 or more specific users. By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). #> [CmdletBinding()] param ( [Parameter()] [String]$Users, [Parameter()] [String]$ExportCSV, [Parameter()] [String]$ExportTXT ) begin { if ($env:usersToCheck -and $env:usersToCheck -notlike "null") { $Users = $env:usersToCheck } if ($env:exportCsvResultsToThisCustomField -and $env:exportCsvResultsToThisCustomField -notlike "null") { $ExportCSV = $env:exportCsvResultsToThisCustomField } if ($env:exportTextResultsToThisCustomField -and $env:exportTextResultsToThisCustomField -notlike "null") { $ExportTXT = $env:exportTextResultsToThisCustomField } if ($Users) { $UsersToCheck = $Users.split(',') | ForEach-Object { $_.Trim() } Write-Warning "Only the following users will be checked: $UsersToCheck" } function Test-IsDomainController { if ($PSVersionTable.PSVersion.Major -ge 5) { $OS = Get-CimInstance -ClassName Win32_OperatingSystem } else { $OS = Get-WmiObject -Class Win32_OperatingSystem } if ($OS.ProductType -eq "2") { return $True } } function Test-IsAzureJoined { $dsreg = dsregcmd.exe /status | Select-String "AzureAdJoined : YES" if ($dsreg) { return $True } } if ([System.Environment]::OSVersion.Version.Major -ge 10) { if (Test-IsAzureJoined) { Write-Warning "This device is Azure AD Joined, this script currently cannot detect if Azure AD Users are locked out!" } } } process { # For Domain Controllers find the locked out account using Search-ADAccount if (Test-IsDomainController) { Import-Module ActiveDirectory $LockedOutUsers = Search-ADAccount -LockedOut | Select-Object SamAccountName, LastLogonDate, PasswordExpired, Enabled } else { $LockedOutUsers = if ($PSVersionTable.PSVersion.Major -ge 5) { Get-CimInstance -ClassName Win32_Useraccount | Where-Object { $_.Lockout -eq $True } | Select-Object Name, Domain, LocalAccount, Disabled } else { Get-WmiObject -Class Win32_Useraccount | Where-Object { $_.Lockout -eq $True } | Select-Object Name, Domain, LocalAccount, Disabled } } if ($Users) { $LockedOutUsers = $LockedOutUsers | Where-Object { $UsersToCheck -contains $_.Name -or $UsersToCheck -contains $_.SamAccountName } } if ($LockedOutUsers) { # Output any locked out users into the activity log Write-Warning "Locked out users were found!" $LockedOutUsers | Format-Table | Out-String | Write-Host # Export the list in CSV format into a custom field if ($ExportCSV) { Ninja-Property-Set $ExportCSV ($LockedOutUsers | ConvertTo-Csv -NoTypeInformation) } # Export the usernames into a custom field if ($ExportTXT) { if ($LockedOutUsers.Name) { Ninja-Property-Set $ExportTXT ($LockedOutUsers.Name | Out-String) } if ($LockedOutUsers.SamAccountName) { Ninja-Property-Set $ExportTXT ($LockedOutUsers.SamAccountName | Out-String) } } Exit 1 } Write-Host "No locked out users detected. Please note this does NOT check Azure AD Accounts." Exit 0 } end { }
Accedi a oltre 700 script nel Dojo NinjaOne
Analisi dettagliata
La sceneggiatura funziona in modo semplice, ma efficace:
- Inizializzazione dei parametri: Si inizia con l’impostazione dei parametri per l’input dell’utente, che comprendono opzioni per specificare utenti particolari e per esportare i risultati in formato CSV o TXT.
- Controllo dell’ambiente: Lo script valuta quindi l’ambiente operativo, determinando se è in esecuzione su un controller di dominio o su una workstation e se il computer è unito ad Azure AD. Si tratta di un aspetto cruciale, in quanto determina il metodo utilizzato per trovare gli account bloccati.
- Rilevamento dell’account bloccato:
- Sui controller di dominio, utilizza Search-ADAccount per trovare gli account bloccati.
- Sulle stazioni di lavoro, utilizza i metodi della classe Win32_UserAccount per ottenere lo stesso risultato.
- Verifica selettiva dell’utente: Se vengono forniti utenti specifici, i risultati vengono filtrati di conseguenza.
- Output ed esportazione: Lo script visualizza gli account bloccati e offre la possibilità di esportare le informazioni in formato CSV o TXT.
- Finalizzazione: Si conclude indicando se gli account bloccati sono stati rilevati o meno.
Casi d’uso potenziali
Immagina un MSP che gestisce una rete con numerosi account utente. Improvvisamente, diversi utenti segnalano l’impossibilità di accedere ai propri account. L’MSP può eseguire rapidamente il presente script per identificare gli account bloccati, accelerando notevolmente il processo di risoluzione dei problemi.
Confronti
Tradizionalmente, i controlli degli account bloccati prevedono ricerche manuali o l’utilizzo di strumenti separati, come gli strumenti amministrativi AD. L’approccio di PowerShell semplifica il processo, offrendo una soluzione più integrata e automatizzata, efficiente per gli ambienti su larga scala.
Domande frequenti
- Questo script può verificare gli account Azure AD?
No, è stato progettato specificamente per gli account dei controller locali e di dominio. - Il presente script è adatto ai principianti di PowerShell?
Sì, è facile da usare, anche se si consiglia una conoscenza di base di PowerShell. - Lo script può essere personalizzato?
Assolutamente sì, è flessibile e può essere modificato per adattarsi a esigenze specifiche.
Implicazioni
Sebbene lo script sia molto efficace, è importante ricordare che gli account bloccati possono segnalare problemi più profondi, come violazioni della sicurezza o uso improprio del sistema. L’identificazione e l’analisi tempestive sono fondamentali.
Raccomandazioni
- Utilizza regolarmente lo script per i controlli proattivi.
- Unisci il tutto a protocolli di sicurezza più ampi.
- Personalizza lo script in base alle esigenze specifiche del tuo ambiente.
Considerazioni finali
In un’epoca in cui l’efficienza e la sicurezza sono fondamentali, NinjaOne offre gli strumenti e le funzionalità necessarie per una gestione IT moderna. Questo script esemplifica come PowerShell, un componente della suite NinjaOne, possa essere sfruttato per migliorare le operazioni e la sicurezza IT. L’approccio completo di NinjaOne alla gestione IT lo rende un alleato indispensabile per navigare nel complesso panorama IT.