17/11/2024

PowerShell

Comment utiliser PowerShell pour obtenir les SID des utilisateurs ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à lister le SID des utilisateurs de Windows à l'aide de plusieurs commandes différentes ! Nous allons utiliser 4 commandes PowerShell : Get-WmiObject, Get-CimInstance, Get-LocalUser et Get-ADUser pour PowerShell, ainsi que deux autres commandes : wmic et whoami.

Pour rappel, sous Windows, le SID pour Security IDentifier ou identificateur de sécurité en français, est une chaîne unique pour identifier un objet de sécurité, notamment un utilisateur ou un groupe sur une machine Windows. Au sein d'un annuaire Active Directory, chaque objet possède également son SID. Cela signifie que derrière chaque nom d'utilisateur se cache un SID. Il est notamment utilisé pour gérer les autorisations.

Comment récupérer le SID d'un utilisateur local ou Active Directory en ligne de commande ? C'est ce que nous allons voir à l'aide de plusieurs commandes, bien que cette information soit aussi accessible dans le Registre Windows.

II. Récupérer le SID avec PowerShell

A. Get-WmiObject et Get-CimInstance

Commençons par interroger les classes WMI (Windows Management Instrumentation) de Windows avec la commande Get-WmiObject de PowerShell.

Get-WmiObject -Class win32_UserAccount | Format-Table Name,SID

Cette commande retourne la liste des utilisateurs locaux avec leur SID respectif :

Windows SID avec Get-WmiObject

Pour récupérer directement le SID d'un utilisateur local spécifique, nous pouvons utiliser cette syntaxe :

(Get-WmiObject -Class win32_UserAccount -Filter "name='Florian' and domain='$env:ComputerName'").SID

Cette commande permet de récupérer la valeur de la propriété SID, et nous appliquons un filtre sur le nom d'utilisateur "Florian". Le fait de spécifier "domain='$env:ComputerName'"" permet de cibler la base de comptes locale.

Toutefois, il est préférable d'utiliser la commande Get-CimInstance puisqu'elle succède à Get-WmiObject. Elle s'utilise de la même façon, sauf qu'elle s'appuie sur WinRM (protocole de gestion à distance) plutôt que WMI, donc attention au numéro de ports, car les flux ne sont pas les mêmes. Il suffit de remplacer le nom de la commande :

Get-CimInstance -Class win32_UserAccount | Format-Table Name,SID

Nous pouvons constater que la sortie est identique :

Windows SID avec Get-CimInstance

Ces deux cmldets PowerShell prennent en charge le paramètre "-ComputerName", ce qui permet d'interroger une machine à distance à condition que les flux soient autorisés dans le pare-feu Windows.

Ainsi, depuis un serveur nous pouvons récupérer les informations sur une autre machine en spécifiant son nom (exemple avec PC-01) :

Get-CimInstance -Class win32_UserAccount -ComputerName PC-01 | Format-Table Name,SID
Windows SID Get-CimInstance à distance

B. Get-LocalUser

PowerShell intègre un ensemble de commandes pour gérer les utilisateurs et groupes locaux de Windows, dont Get-LocalUser pour obtenir des informations sur les utilisateurs. Cela tombe bien, car cette commande retourne la propriété SID correspondante au SID.

Ainsi, nous pouvons obtenir tous les SID de cette façon :

Get-LocalUser | Select-Object Name, SID

Nous obtenons bien la même liste :

Windows SID avec Get-LocalUser

Voire même le SID d'un utilisateur spécifique :

Get-LocalUser -Name "Florian" | Select-Object Name, SID
# ou uniquement la valeur :
(Get-LocalUser -Name "Florian").SID.value

C. Get-ADUser

Bien que la commande Get-LocalUser permette de récupérer les SID des comptes sur un contrôleur de domaine Active Directory, il ne faut pas négliger la commande Get-ADUser du module PowerShell "Active Directory". Elle donne accès à l'ensemble des propriétés des objets Active Directory appartenant à la classe user.

Ainsi, pour obtenir le SID de tous les utilisateurs de l'Active Directory, cela nous donne la commande suivante :

Get-ADUser -Filter * | Select-Object Name, SID
Active Directory SID Get-ADUser

Bien sûr, vous pouvez cibler un utilisateur spécifique en précisant son identifiant :

Get-ADUser -Identity "guy.mauve" | Select-Object Name, SID

Bien qu'il soit question des utilisateurs dans cet exemple, sachez que vous pouvez obtenir cette informations pour les groupes et les ordinateurs avec ces deux commandes : Get-ADGroup et Get-ADComputer.

III. Récupérer le SID en ligne de commande

A. Wmic

Bien que wmic soit une commande amenée à disparaître et que Microsoft ne prend plus en charge (voir cette page), elle reste une commande historique et très utile pour récupérer des informations sans passer par PowerShell.

La commande ci-dessous va permettre de lister tous les comptes utilisateurs locaux d'une machine afin d'avoir le nom et le SID de chaque compte :

wmic useraccount get name,sid
Windows SID avec wmic

Pour récupérer le SID d'un utilisateur spécifique, nous pouvons utiliser la syntaxe ci-dessous (exemple pour l'utilisateur "Florian") mais cette commande n'est pas pris en charge sur les versions récentes de Windows et Windows Server.

wmic useraccount where name="Florian" get sid

La commande retourne l'erreur "Description = Demande non valide".

B. Whoami

La méthode la plus simple et la plus rapide d'obtenir le SID du compte actuellement ouvert sur l'ordinateur, c'est probablement avec cette commande :

whoami /user

La commande whoami est généralement utilisée pour savoir "Qui suis-je ?", autrement dit avec quel utilisateur sommes-nous actuellement connecté. Si l'on ouvre une Invite de commande pour console PowerShell avec sa session en cours, la commande retournera bien le SID de l'utilisateur actuel :

SID Windows avec whoami

IV. Conclusion

Si vous êtes dans une situation où vous avez besoin de récupérer la liste des SID des utilisateurs d'une machine, ou le SID d'un utilisateur spécifique, vous avez un ensemble de commandes à votre disposition pour obtenir cette information en quelques secondes.

Laquelle avez-vous l'habitude d'utiliser ? Personnellement, soit Get-ADUser ou Get-CimInstance.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.