Guide de script PowerShell : détecter les comptes verrouillés sur Windows

Points à retenir

  • PowerShell pour plus d’efficacité: Utiliser PowerShell pour détecter les comptes verrouillés rapidement dans les environnements Windows.
  • Exclut Azure AD: Le script ne couvre pas les comptes Azure AD, se concentrant uniquement sur les comptes locaux et les comptes de contrôleur de domaine.
  • Détection spécifique à l’environnement: Adapte son approche suivant s’il est exécuté sur un contrôleur de domaine ou sur une station de travail.
  • Résultats personnalisables: Il offre une grande flexibilité pour le format des résultats et permet l’exportation dans en fichiers CSV et TXT.
  • Capacité de filtrage des utilisateurs: Il peut cibler des utilisateurs spécifiques si nécessaire, ce qui améliore sa précision.
  • Automatisé plutôt que manuel: Représente une alternative efficace aux méthodes de vérification manuelle des comptes.
  • Indication de problèmes plus vastes: Les comptes verrouillés peuvent être le signe de problèmes de sécurité ou d’exploitation plus vastes.
  • Accessible aux débutants: Facile à utiliser pour ceux qui ont des connaissances de base de PowerShell, mais personnalisable pour les utilisateurs avancés.
  • Un suivi régulier est recommandé: Il est préférable de l’utiliser dans le cadre d’une stratégie de suivi régulier des comptes.
  • Amélioré avec NinjaOne: Les fonctionnalités du script complètent les outils de gestion informatique complets de NinjaOne.

Le monde de la sécurité informatique étant en constante évolution, la gestion des comptes d’utilisateurs reste un élément primordial pour permettre une protection des systèmes et des données. L’un des aspects essentiels est la surveillance et le traitement des comptes verrouillés, un problème courant dans les environnements informatiques vastes et dynamiques. Avec PowerShell, les administrateurs peuvent identifier les comptes verrouillés de façon efficace, garantissant ainsi la continuité et la sécurité de l’entreprise.

Contexte

Le script PowerShell fourni apparaît comme un outil essentiel pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP). Sa fonction principale est d’identifier les comptes verrouillés dans un environnement Windows, à l’exclusion des comptes Azure AD. Cette capacité est cruciale pour maintenir l’efficacité opérationnelle et la sécurité, car les comptes verrouillés peuvent être à la fois le symptôme d’une erreur de l’utilisateur et l’indicateur potentiel d’une faille de sécurité. 

Le 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 {
    
    
    
}

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenir l’accès

Description détaillée

Le script fonctionne de manière simple mais efficace :

  • Initialisation des paramètres : Il commence par définir les paramètres d’entrée des utilisateurs, qui comprennent des options permettant de spécifier des utilisateurs particuliers et d’exporter les résultats aux formats CSV ou TXT.
  • Vérification de l’environnement: Le script évalue ensuite l’environnement d’exploitation, en déterminant s’il s’agit d’un contrôleur de domaine ou d’une station de travail, et si la machine est reliée à Azure AD. Ce point est crucial car il détermine la méthode utilisée pour trouver les comptes bloqués.
  • Détection de compte bloqué:
    • Pour les contrôleurs de domaine, il utilise Search-ADAccount pour trouver les comptes verrouillés.
    • Pour les postes de travail, il utilise les méthodes de la classe Win32_UserAccount.
  • Vérification sélective des utilisateurs: Si des utilisateurs spécifiques sont indiqués, les résultats sont filtrés en conséquence.
  • Résultats et exportation: Le script affiche les comptes verrouillés et offre la possibilité d’exporter ces informations au format CSV ou TXT.
  • Finalisation: Il conclut en indiquant si des comptes verrouillés ont été détectés ou non.

Cas d’utilisation potentiels

Imaginez une entreprise MSP qui gère un réseau avec de nombreux comptes d’utilisateurs. Soudain, plusieurs utilisateurs signalent l’impossibilité d’accéder à leurs comptes. L’entreprise MSP peut rapidement exécuter ce script pour identifier les comptes verrouillés, ce qui accélère considérablement le processus de dépannage et de résolution.

Comparaisons

Traditionnellement, les vérifications de comptes verrouillés impliquent des recherches manuelles ou l’utilisation d’outils distincts tels que les outils d’administration AD. L’approche PowerShell rationalise ce processus, offrant une solution plus intégrée et scriptable, efficace pour les environnements à grande échelle.

FAQ

  • Ce script peut-il vérifier les comptes Azure AD ?
    Non, il est spécifiquement conçu pour les comptes locaux et les comptes de contrôleurs de domaine.
  • Ce script est-il adapté aux débutants en PowerShell ?
    Oui, il est facile à utiliser, mais il est recommandé d’avoir des connaissances de base de PowerShell.
  • Le script peut-il être personnalisé ?
    Absolument, il est flexible et peut être modifié pour répondre à des besoins particuliers.

Implications

Bien que le script soit très efficace, il est important de se rappeler que les comptes verrouillés peuvent signaler des problèmes plus profonds, tels que des failles de sécurité ou une mauvaise utilisation du système. L’identification et l’analyse en temps utile sont essentielles.

Recommandations

  • Utilisez régulièrement le script pour des contrôles proactifs.
  • Combinez cela avec des protocoles de sécurité plus étendus.
  • Personnalisez le script en fonction des besoins particuliers de votre environnement.

Conclusion

A une époque où l’efficacité et la sécurité sont primordiales, NinjaOne offre les outils et les capacités nécessaires à une gestion moderne de l’informatique. Ce script illustre comment PowerShell, un composant de la suite NinjaOne, peut être utilisé pour améliorer les opérations et la sécurité informatiques. L’approche globale de la gestion informatique de NinjaOne en fait un allié indispensable pour naviguer dans le monde complexe de l’informatique.

Pour aller plus loin

Créer une équipe informatique efficace et performante nécessite une solution centralisée qui soit l’outil principal pour fournir vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu’ils soient, sans avoir besoin d’une infrastructure complexe sur site.

Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée ou commencez votre essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

Voir la démo×
×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton « J’accepte » ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni « tel quel » et « tel que disponible », sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).