Guida agli script di PowerShell: Rilevare gli account bloccati in Windows

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

Ottieni l’accesso

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.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più sulla distribuzione remota di script con NinjaOne, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.