Voir la démo×
×

Voir NinjaOne en action !

Utilisation de PowerShell pour voir tous les utilisateurs locaux sur les systèmes Windows

Elencare gli utenti locali usando PowerShell

Aujourd’hui, nous nous penchons sur un script PowerShell spécialement conçu à cet effet : voir tous les utilisateurs locaux. PowerShell est un outil puissant pour les professionnels de l’informatique, souvent utilisé pour sa capacité à automatiser des tâches et à extraire des données de manière optimale. Une tâche cruciale fréquemment rencontrée par les fournisseurs de services gérés (MSP) et les administrateurs de systèmes consiste à dresser la liste des utilisateurs d’un système informatique.

Contexte

Il est indéniable que dans l’environnement informatique actuel, qui évolue rapidement, la capacité d’extraire rapidement des données sur les utilisateurs du système est d’une valeur inestimable. C’est particulièrement vrai dans les grandes entreprises ou lors de la mise en place de nouveaux équipements ou logiciels. Les administrateurs système et les entreprises MSP ont souvent besoin de savoir qui a accès à quoi et quand. Le script PowerShell fourni répond à ce besoin en répertoriant les utilisateurs locaux sur une machine Windows, ce qui permet aux professionnels d’obtenir rapidement des informations.

Le script

#Requires -Version 2.0

<#
.SYNOPSIS
    Lists local computers' users.
.DESCRIPTION
    Lists local computers' users. By default it lists only the enabled users.
.EXAMPLE
    No parameters needed.
    Lists enabled users on the local computer.
.EXAMPLE
     -AllUsers
    Lists enabled and disabled users on the local computer.
.EXAMPLE
    PS C:\> List-Users.ps1 -AllUsers
    Lists enabled and disabled users on the local computer.
.OUTPUTS
    System.Management.Automation.SecurityAccountsManager.LocalUser[]
.NOTES
    Minimum OS Architecture Supported: Windows 7, Windows Server 2012
    Release Notes:
    Initial Release
.COMPONENT
    ManageUsers
#>

[CmdletBinding()]
param (
    # Will return disabled users as well as enabled users
    [Switch]
    $AllUsers
)

begin {
    Write-Output "Starting List Users"
}

process {
    # If we are running powershell under a 32bit OS or running a 32bit version of powershell
    # or we don't have access to Get-LocalUser
    if (
        [Environment]::Is64BitProcess -ne [Environment]::Is64BitOperatingSystem -or
            (Get-Command -Name "Get-LocalUser" -ErrorAction SilentlyContinue).Count -eq 0
    ) {
        # Get users from net.exe user
        $Data = $(net.exe user) | Select-Object -Skip 4
        # Check if the command ran the way we wanted and the exit code is 0
        if ($($Data | Select-Object -last 2 | Select-Object -First 1) -like "*The command completed successfully.*" -and $LASTEXITCODE -eq 0) {
            # Process the output and get only the users
            $Users = $Data[0..($Data.Count - 3)] -split '\s+' | Where-Object { -not $([String]::IsNullOrEmpty($_) -or [String]::IsNullOrWhiteSpace($_)) }
            # Loop through each user
            $Users | ForEach-Object {
                # Get the Account active property look for a Yes
                $Enabled = $(net.exe user $_) | Where-Object {
                    $_ -like "Account active*" -and
                    $($_ -split '\s+' | Select-Object -Last 1) -like "Yes"
                }
                # Output Name and Enabled almost like how Get-LocalUser displays it's data
                [PSCustomObject]@{
                    Name    = $_
                    Enabled = if ($Enabled -like "*Yes*") { $true }else { $false }
                }
            } | Where-Object { if ($AllUsers) { $_.Enabled }else { $true } }
        }
        else {
            exit 1
        }
    }
    else {
        try {
            if ($AllUsers) {
                Get-LocalUser
            }
            else {
                Get-LocalUser | Where-Object { $_.Enabled -eq $true }
            }
        }
        catch {
            Write-Error $_
            exit 1
        }
    }
}

end {
    Write-Output "Completed List Users"
}

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

Obtenez l’accès

Description détaillée

Au fond, le script est assez simple. Il commence par définir un paramètre, $AllUsers, qui, lorsqu’il est invoqué, inclut les utilisateurs activés et désactivés dans son résultat. Dans le bloc « process », le script vérifie d’abord l’architecture du système et la disponibilité de la cmdlet Get-LocalUser. En cas de non-concordance ou si la cmdlet n’est pas disponible, la commande net.exe user est utilisée. Les données obtenues par l’une ou l’autre méthode sont ensuite traitées pour dresser la liste et voir tous les utilisateurs locaux. Lorsque la commande net.exe user est utilisée, le script récupère le statut de l’utilisateur, en vérifiant si chaque compte est actif. Ces données sont ensuite présentées de manière structurée. Dans les scénarios où Get-LocalUser est disponible, il récupère et répertorie directement les utilisateurs, en ne filtrant que ceux qui sont activés, à moins que le paramètre $AllUsers ne soit invoqué.

Cas d’utilisation potentiels

Imaginez une informaticienne, Jane, en train de déployer une nouvelle mise à jour logicielle dans son entreprise. Avant de déployer la mise à jour, elle doit vérifier les comptes d’utilisateurs sur chaque machine pour s’assurer que toutes les licences logicielles sont correctement attribuées. Au lieu de vérifier manuellement chaque ordinateur, elle utilise le script PowerShell, ce qui lui permet d’économiser des heures de son précieux temps.

Comparaisons

Bien que le script utilise la cmdlet Get-LocalUser dans la mesure du possible, son approche alternative utilisant net.exe user est un clin d’œil aux anciens systèmes. D’autres scripts peuvent s’appuyer uniquement sur des cmdlets ou des méthodes plus récentes. La double approche du script fourni garantit la compatibilité avec un large éventail de systèmes Windows, ce qui le rend polyvalent dans divers environnements.

FAQ

  • Le script peut-il être utilisé sur n’importe quelle machine Windows ?
    Il est conçu pour les systèmes d’exploitation Windows 7 et Windows Server 2012.
  • Que faire si Get-LocalUser n’est pas disponible sur mon système ?
    Le script recourt automatiquement à la commande net.exe user si Get-LocalUser n’est pas disponible ou s’il y a une incompatibilité d’architecture.

Implications

La liste des utilisateurs d’un ordinateur peut fournir un aperçu des points d’accès potentiels pour le personnel non autorisé. Dans le contexte de la sécurité informatique, la compréhension de ces utilisateurs et de leurs statuts est une étape fondamentale pour s’assurer que seules les personnes autorisées y ont accès.

Recommandations

  • Mettez régulièrement à jour votre PowerShell pour avoir accès aux dernières cmdlets.
  • Exécutez toujours des scripts provenant de sources fiables afin de garantir la sécurité du système.
  • Vérifiez régulièrement les listes d’utilisateurs pour s’assurer que des comptes non autorisés n’ont pas été ajoutés.

Conclusion

NinjaOne, avec ses solutions de gestion informatique performantes, complète des outils tels que ce script PowerShell. Lorsque les professionnels de l’informatique listent les utilisateurs locaux à l’aide de notre script PowerShell, ils peuvent ensuite utiliser la plateforme complète de NinjaOne pour gérer, surveiller et sécuriser ces utilisateurs, en veillant à ce que l’infrastructure informatique reste à la fois optimisée et sécurisée.

Prochaines étapes

Pour créer une équipe informatique efficace et performante, il est essentiel d’avoir une solution centralisée qui joue le rôle de noyau principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous leurs 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 en direct ou profitez d’un essai gratuit de la plateforme NinjaOne.

Vous pourriez aussi aimer

Prêt à devenir un Ninja de l’informatique ?

Découvrez comment NinjaOne peut vous aider à simplifier les opérations informatiques.

By clicking the “I Accept” button below, you indicate your acceptance of the following legal terms as well as our 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 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).