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