Vérifier si un script PowerShell est exécuté en admin

Comment vérifier si un script PowerShell est exécuté en tant qu’administrateur ?

I. Présentation

Dans ce tutoriel, nous allons créer une fonction PowerShell pour vérifier si un script PowerShell est exécuté en tant qu’administrateur.

Dans de nombreux scénarios, un script PowerShell peut avoir besoin de privilèges élevés pour exécuter certaines tâches et actions. De ce fait, s’il n’est pas exécuté en tant qu’administrateur, il ne s’exécutera pas correctement : grâce à cette vérification, nous allons pouvoir effectuer ce contrôle dès le lancement du script PowerShell.

👉 Si vous souhaitez apprendre PowerShell, découvrez notre cours complet :

II. Le code PowerShell

Désormais, nous allons écrire le code permettant d’atteindre notre objectif du jour ! Tout d’abord, nous allons stocker dans la variable « $UserCurrentPrincipal » la liste des permissions correspondantes à l’utilisateur utilisé pour exécuter le script PowerShell. Autrement dit, il s’agit du compte utilisé pour lancer « powershell.exe » (voire même le code via Windows PowerShell ISE).

$UserCurrentPrincipal = New-Object Security.Principal.WindowsPrincipal((Security.Principal.WindowsIdentity)::GetCurrent())

Ensuite, nous allons parcourir cet objet pour déterminer si oui ou non, cet utilisateur dispose du rôle « Administrator » sur la machine locale. La méthode « IsInRole«  va retourner un booléen (vrai ou faux), ce qui permettra de déterminer si le compte est administrateur (vrai) ou non (faux).

Remarque : que ce soit une installation de Windows en anglais, en français ou dans une autre langue, le nom du rôle est « Administrator« .

$UserIsAdmin = $UserCurrentPrincipal.IsInRole((Security.Principal.WindowsBuiltInRole)::Administrator)

Maintenant que nous avons compris le principe de ces deux lignes, sachez que nous pouvons effectuer la même opération sur une seule ligne, voici le code :

$UserIsAdmin = ((Security.Principal.WindowsPrincipal) (Security.Principal.WindowsIdentity)::GetCurrent()).IsInRole((Security.Principal.WindowsBuiltInRole) "Administrator")

Vous l’aurez compris, la variable « $UserIsAdmin » contient « true » ou « false » selon le contexte d’exécution du code PowerShell. Il ne reste plus qu’à inclure ce code dans une structure conditionnelle « if » pour évaluer le résultat.

Avant cela, nous allons inclure ce code dans une fonction nommée « Test-AdminContext » qui retournera uniquement la valeur de la variable « $UserIsAdmin« .

function Test-AdminContext 
    $UserIsAdmin = ((Security.Principal.WindowsPrincipal) (Security.Principal.WindowsIdentity)::GetCurrent()).IsInRole((Security.Principal.WindowsBuiltInRole) "Administrator")
    return $UserIsAdmin

Puis, nous pouvons appeler cette fonction dans une structure conditionnelle. Grâce au bout de code ci-dessous, l’exécution du script sera immédiatement arrêtée si ce dernier n’est pas exécuté dans un contexte administrateur. Le fait de préciser « $($MyInvocation.MyCommand) » permet d’indiquer le nom du script PS1.

if (-not (Test-AdminContext)) 
    Write-Warning "Le script '$($MyInvocation.MyCommand)' ne peut pas être exécuté car la session PowerShell n'est pas exécutée dans le contexte Administrateur"
    exit

Si PowerShell est exécuté en tant qu’administrateur, le script poursuivra son exécution : votre code doit donc être intégré à la suite de la structure conditionnelle.

Une autre façon de faire, ce serait d’inclure le test « if » directement dans la fonction et d’appeler simplement la fonction par son nom :

function Test-AdminContext 
    $UserIsAdmin = ((Security.Principal.WindowsPrincipal) (Security.Principal.WindowsIdentity)::GetCurrent()).IsInRole((Security.Principal.WindowsBuiltInRole) "Administrator")

    if (-not ($UserIsAdmin)) 
        Write-Warning "Le script '$($MyInvocation.MyCommand)' ne peut pas être exécuté car la session PowerShell n'est pas exécutée dans le contexte Administrateur"
        exit
    



Test-AdminContext

Vous n’avez plus qu’à exploiter ce bout de code ou à l’adapter selon vos besoins !

III. Conclusion

Cette fonction et ses quelques lignes de code PowerShell sont très pratiques pour effectuer cette vérification au lancement d’un script, lorsque l’exécution en tant qu’administrateur est un prérequis au bon fonctionnement de celui-ci. Désormais, vous n’avez plus qu’à en profiter !

Hébergez votre site à partir de 2$ sur 👉👉👉 https://www.tnctech.ca

À propos Santana

Analyste en cybersécurité avec 5 ans d'expérience dans la protection des systèmes d'information contre les menaces et les attaques. Expertise dans la surveillance des réseaux, l'analyse des vulnérabilités, et la gestion des incidents de sécurité. Passionnée par l'innovation technologique et la mise en œuvre de solutions de sécurité robustes pour protéger les données sensibles et assurer la conformité réglementaire.

Laisser un commentaire

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