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

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.

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour 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 profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

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)).