Lorsque vous travaillez avec Windows, à un moment donné, vous devrez probablement découvrir quels comptes d’utilisateur sont actuellement connectés à un ordinateur. Heureusement, vous pouvez utiliser PowerShell pour obtenir les utilisateurs actuels sur des ordinateurs locaux ou distants.
Avez-vous des mots de passe compromis dans votre Active Directory? Découvrez-le avec Specops Password Auditor Free.
Dans ce tutoriel, vous apprendrez plusieurs façons d’utiliser PowerShell pour obtenir les utilisateurs actuels sur un ordinateur. Les méthodes que vous apprendrez incluront des commandes natives, des classes .NET et des cmdlets spécifiques à Windows Management Instrumentation (WMI).
Êtes-vous prêt à découvrir qui se cache sur votre ordinateur? Commençons!
Prérequis
Dans ce tutoriel, vous apprendrez mieux en suivant les exemples. Et pour ce faire, vous aurez besoin d’un ordinateur fonctionnant sous une version moderne de Windows, comme Windows 10, Windows Server 2012, ou ultérieur.
Ce tutoriel utilisera un ordinateur fonctionnant sous Windows Server 2019 nommé DC1.
Pourquoi utiliser PowerShell pour obtenir les utilisateurs actuellement connectés à un ordinateur?
Il est vrai qu’il existe des moyens de connecter les utilisateurs actuels à un ordinateur sans utiliser PowerShell. Après tout, les administrateurs système devaient avoir une méthode pour le faire même avant PowerShell, n’est-ce pas ? Si c’est le cas, pourquoi utiliser PowerShell ?
Effectuer la même tâche en utilisant PowerShell présente l’avantage de traiter les résultats comme des objets que vous pouvez manipuler. Par exemple, si vous exécutez un script qui demande les informations d’identification de l’utilisateur, PowerShell peut remplir automatiquement le nom d’utilisateur, et vous n’avez qu’à taper manuellement le mot de passe.
Un autre exemple concret est l’exportation de la liste des utilisateurs actuellement connectés à un serveur dans un fichier. Cela peut être réalisé en utilisant PowerShell pour obtenir les utilisateurs actuels, puis exporter le résultat dans des fichiers CSV, HTML ou XML. Ensuite, divers flux de travail d’automatisation peuvent utiliser cette sortie.
Il peut y avoir des milliers de raisons d’utiliser PowerShell pour obtenir les utilisateurs actuels, mais cela dépend finalement de vos besoins. Et ce tutoriel vous apprendra les différentes façons d’atteindre cet objectif.
Interrogation de la classe Win32_ComputerSystem.
Commençons par les cmdlets natifs PowerShell appelés Get-WMIObject
et Get-CimInstance
. Ces cmdlets vous permettent de interroger des informations, y compris l’utilisateur actuellement connecté, en utilisant les classes Windows Management Instrumentation (WMI) sur un ordinateur local ou distant.
Get-WMIObject
est le cmdlet plus ancien (déprécié) et est disponible uniquement jusqu’à Windows PowerShell 5.1. En revanche,Get-CIMInstance
est le cmdlet plus récent et plus sécurisé et est disponible jusqu’aux dernières versions de PowerShell.
Pour en savoir plus, visitez Get-CIMInstance Vs. Get-WMIObject: Quelle est la différence?
Pour utiliser PowerShell afin d’obtenir l’utilisateur actuel, invoquez la cmdlet ciblant la classe Win32_ComputerSystem. La classe Win32_ComputerSystem comprend diverses propriétés, notamment la propriété Username
. Pour ce faire, ouvrez une fenêtre PowerShell et exécutez les commandes ci-dessous.
Note : Interroger la classe Win32_ComputerSystem ne renverra que le nom d’utilisateur de la personne connectée directement à l’ordinateur (session console). Si l’utilisateur s’est connecté à distance (par exemple, Bureau à distance), le nom d’utilisateur sera vide.
Les deux commandes renvoient le même résultat, comme illustré ci-dessous. Si l’utilisateur actuel est un compte utilisateur de domaine, la commande renverra le domaine et le nom d’utilisateur (domaine\nom_utilisateur
). Mais pour un compte utilisateur local, la sortie serait ordinateur\nom_utilisateur
.

Get-WMIObject
etGet-CimInstance
ont un paramètre appelé-computerName
, qui accepte le nom de l’ordinateur à interroger. Utiliser ce paramètre signifie que vous pouvez interroger les mêmes informations à partir d’une machine distante dans le réseau.
Mais si vous avez besoin d’obtenir uniquement le nom d’utilisateur sans le domaine, une solution consiste à diviser la sortie en utilisant la méthode split()
. Pour ce faire, exécutez la commande suivante dans PowerShell.
En conséquence, PowerShell renvoie uniquement la partie utilisateur, comme le montre la capture d’écran ci-dessous.

La lecture des variables d’environnement Windows
Une autre manière d’utiliser PowerShell pour obtenir l’utilisateur actuel sur un ordinateur consiste à récupérer les valeurs des variables d’environnement. Les variables d’environnement représentent les données du système d’exploitation, notamment le nom d’utilisateur actuel, entre autres.
Il existe trois façons d’interagir avec les variables d’environnement. Peu importe la méthode que vous choisissez, le résultat sera le même.
Le lecteur Env PowerShell
PowerShell met en cache les variables d’environnement et les rend disponibles via un lecteur PowerShell (PSDrive) appelé le lecteur Env:
. Les PSDrives sont des emplacements de données auxquels vous pouvez accéder comme un lecteur sur l’ordinateur (par exemple, C:), mais qui ne sont accessibles qu’à l’intérieur de PowerShell.
PowerShell crée automatiquement le lecteur Env:
dès l’ouverture d’une session PowerShell. Et parce que Env:
est un lecteur, vous pouvez obtenir son contenu en invoquant la cmdlet Get-ChildItem
, de manière similaire à la liste du contenu d’un lecteur ou d’un dossier de système de fichiers.
Utilisation du lecteur Env: Dans PowerShell, obtenez l’utilisateur actuel en exécutant la commande ci-dessous.
La capture d’écran ci-dessous montre le résultat attendu. Comme vous pouvez le voir, la commande retourne l’élément USERNAME
et sa valeur correspondante, qui est l’utilisateur actuellement connecté.

Pour ne retourner que la valeur du nom d’utilisateur, modifiez la commande comme indiqué ci-dessous et exécutez-la à nouveau dans PowerShell.
Et comme vous pouvez le voir ci-dessous, la commande ne retourne que la valeur du nom d’utilisateur en tant que chaîne.

La variable $env
Outre l’accès aux variables d’environnement en tant que PSDrive en les traitant comme des fichiers dans un lecteur, une autre façon est d’accéder au lecteur Env
en tant que variable. Cela signifie que vous pouvez référencer les variables d’environnement en utilisant la syntaxe ci-dessous.
Sur la base de la syntaxe mentionnée, exécutez la commande ci-dessous dans PowerShell pour obtenir l’utilisateur actuel.
Comme le montre la capture d’écran ci-dessous, la commande renvoie la valeur du nom d’utilisateur.

La classe Environment .NET
PowerShell est un langage orienté objet et une interface de ligne de commande. Essentiellement, tout ce sur quoi vous travaillez dans PowerShell est un objet. Lorsque vous exécutez une commande, la sortie est un objet. Si vous avez déclaré une variable, cette variable est elle-même un objet. Vous avez l’idée.
Ces objets ont une structure qui définit le type de données qu’ils représentent, similaire à des plans. Et ces plans sont appelés classes .NET ou simplement classes.
Quant aux variables d’environnement, la classe associée est la classe Environment. Alors, comment utiliser la classe Environment dans PowerShell pour obtenir l’utilisateur actuel ?
Tout comme la variable $env, la classe Environment possède une propriété Username
, dont la valeur est le nom d’utilisateur actuel. Pour obtenir la valeur de la propriété Username, exécutez la commande ci-dessous dans PowerShell.

Outre la propriété Username
, la classe Environment possède également une méthode pour obtenir la valeur d’une variable d’environnement. Le nom de la méthode est GetEnvironmentVariable
.
Pour obtenir l’utilisateur actuel à l’aide de cette méthode, exécutez la commande ci-dessous.

Utilisation de la classe WindowsIdentity .NET
La classe WindowsIdentity est une autre classe .NET que vous pouvez invoquer dans PowerShell pour obtenir l’utilisateur actuel. Cette classe a une méthode appelée GetCurrentName
, qui renvoie un objet représentant l’utilisateur Windows actuel.
Pour obtenir les détails de l’utilisateur actuel, exécutez la commande ci-dessous.
Comme vous pouvez le voir ci-dessous, la commande renvoie les propriétés de l’objet utilisateur actuel, y compris la propriété Name
. La valeur de la propriété Name
suit la convention domaine\utilisateur
.

Pour ne retourner que la partie du nom d’utilisateur, modifiez la commande précédente pour sélectionner uniquement la propriété Name
et appliquez la technique de découpage de chaîne. Pour ce faire, copiez la commande ci-dessous et exécutez-la dans PowerShell.

Utilisation de la commande whoami
Une autre commande pratique qui vous permet d’obtenir rapidement l’utilisateur actuel est la commande whoami
. Cette commande est un fichier exécutable que vous pouvez trouver dans le dossier %WINDIR%\System32 avec le nom de fichier whoami.exe
.
Pour obtenir le nom d’utilisateur actuel, exécutez la commande ci-dessous.
La commande renvoie ensuite le résultat au format domaine nom d'utilisateur
, comme sur la capture d’écran ci-dessous.

Pour obtenir le nom d’utilisateur sans le domaine, appliquez la technique de division de chaîne que vous avez apprise précédemment dans ce tutoriel en exécutant la commande ci-dessous.

La commande whoami
peut également renvoyer le nom distingué entièrement qualifié (FQDN) actuel de l’utilisateur et le nom principal de l’utilisateur (UPN). Cette sortie de commande peut être utile si vous prévoyez d’exécuter un script qui récupère l’identité actuelle de l’utilisateur au-delà du nom d’utilisateur.
Exécutez la commande ci-dessous dans PowerShell pour obtenir le FQDN et l’UPN de l’utilisateur actuel.

Note : Les valeurs de FQDN et d’UPN ne sont disponibles que si l’utilisateur actuellement connecté est un utilisateur de domaine. Si vous essayez d’obtenir ces valeurs pour un utilisateur local, la commande renverra une erreur, comme indiqué ci-dessous.

Utilisation de la commande query
Si vous êtes administrateur système ou utilisateur de domaine, il est fort probable que vous vous soyez connecté à distance à une machine via le protocole Bureau à distance (RDP) au moins une fois, peut-être pour gérer des ressources ou utiliser des applications. Quelle que soit la raison, vous voudriez savoir qui est actuellement connecté et utilise les ressources système.
Heureusement, Windows dispose d’un outil en ligne de commande intégré appelé query
qui peut répertorier tous les utilisateurs actuellement connectés sur un ordinateur. La commande vous montre également si l’utilisateur s’est connecté via une session de bureau à distance ou localement sur l’ordinateur.
La commande query
possède deux paramètres pertinents pour obtenir les utilisateurs connectés ; session
et user
. Le paramètre session
répertorie les sessions d’ordinateur, tandis que le paramètre user
répertorie les utilisateurs et leurs sessions.
La commande
query session
possède un alias appeléqwinsta
, tandis que l’alias de commande pourquery user
estquser
.
Par exemple, exécutez la commande ci-dessous pour répertorier les sessions sur DC1.
Le screenshot ci-dessous montre la sortie de la commande. Dans cet exemple, deux utilisateurs se sont connectés à l’ordinateur DC1, l’un dans la session console et l’autre via RDP. Comme vous pouvez le voir, qwinsta
renvoie toutes les sessions, même celles sans utilisateur.

Si vous exécutez
qwinsta
ouquser
seul, sans l’argument/server:<ordinateur>
, chaque commande interrogera l’ordinateur local par défaut.
Ensuite, pour lister tous les utilisateurs ayant des sessions ouvertes, exécutez la commande user
ci-dessous.
Après avoir exécuté la commande, vous remarquerez immédiatement que quser
renvoie les sessions et les utilisateurs comme la commande qwinsta
. Mais cette fois, il n’y a pas de sessions vides.
Il y a également deux colonnes supplémentaires : IDLE TIME
, qui montre le temps d’inactivité des utilisateurs, et LOGON TIME
montrant l’horodatage de la connexion des utilisateurs.

En fin de compte, en comparant les résultats de qwinsta
et quser
, quser
est la commande plus appropriée en PowerShell pour obtenir les utilisateurs actuels.
Avez-vous des mots de passe compromis dans votre Active Directory ? Découvrez-le avec Specops Password Auditor Free.
Conclusion
Alors qu’il existe de nombreuses façons d’obtenir les utilisateurs actuellement connectés en PowerShell, la méthode la plus appropriée dépend du résultat que vous souhaitez obtenir et de la manière dont vous allez l’utiliser.
Les cmdlets natives liées à WMI et la commande query
vous permettent d’obtenir les utilisateurs connectés sur un ordinateur local ou distant. L’utilisation des classes .NET et des variables d’environnement offre des moyens rapides d’obtenir les mêmes résultats, mais uniquement sur l’ordinateur local.
Que vous prévoyiez d’exécuter un script ou d’afficher manuellement les résultats à l’écran, il existe une méthode adaptée à vos besoins pour utiliser PowerShell afin d’obtenir l’utilisateur actuel. Quelle est la prochaine étape ? Peut-être apprendre à analyser les résultats de la commande query et les convertir en objets PowerShell en écrivant des fonctions avec des expressions régulières ?
Source:
https://adamtheautomator.com/powershell-get-current-user/