Détecter si PowerShell s'exécute en tant qu'administrateur


Réponses:


42
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

Briser ce que cela fait:

  • [bool]- Jetez le résultat final sur a bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- Récupère le WindowsIdentitypour l'utilisateur en cours d'exécution.
  • (...).groups- Accédez à la groupspropriété de l'identité pour savoir à quels groupes d'utilisateurs l'identité appartient.
  • -match "S-1-5-32-544"vérifie s'il groupscontient le SID bien connu du groupe Administrateurs, l'identité ne le contiendra que si "exécuter en tant qu'administrateur" a été utilisé.

2
Au lieu de simplement publier une ligne de code, pouvez-vous expliquer ce qu'il fait? Cela aide les futurs visiteurs à le comprendre et à l'adapter, si nécessaire.
slhck

BOOO. Donnez plus de votes à cet homme
Kolob Canyon

4
Je préfère la réponse de @Bill_Stewart ci-dessous car elle est exempte de chaînes magiques.
8DH

Au lieu d'utiliser -matchet de transtyper:[Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
TheIncorrigible1

57
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

Cela récupère l'identité Windows actuelle et renvoie True si l'identité actuelle a le rôle Administrateur (c'est-à-dire qu'elle s'exécute avec des droits élevés).


13
Bien que la réponse acceptée soit correcte, cette réponse est beaucoup plus claire, en particulier pour quelqu'un qui pourrait lire votre script dans six mois.
Patrick Seymour

46

Dans Powershell 4.0, vous pouvez utiliser requiert en haut de votre script:

#Requires -RunAsAdministrator

Les sorties:

Le script 'MyScript.ps1' ne peut pas être exécuté car il contient une instruction "#requires" pour être exécuté en tant qu'administrateur. La session Windows PowerShell actuelle ne s'exécute pas en tant qu'administrateur. Démarrez Windows PowerShell à l'aide de l'option Exécuter en tant qu'administrateur, puis réessayez d'exécuter le script.


que faire si vous voulez une fonction qui se termine si elle n'est pas exécutée par l'administrateur?
Kolob Canyon

1
@KolobCanyon - Il n'y a rien de tel que d'exécuter uniquement une fonction PowerShell élevée; l'ensemble du processus PowerShell est élevé ou non.
Bill_Stewart

@Bill_Stewart oui, mais vous pouvez returnsi l'utilisateur n'est pas administrateur :)
Kolob Canyon

1
@KolobCanyon - vous ne pouvez élever que le processus PowerShell ; vous ne pouvez pas élever une seule fonction . C'est pourquoi le #Requires -RunAsAdministratorest utile: il empêche le script entier de s'exécuter si vous n'êtes pas élevé.
Bill_Stewart

@Bill_Stewart Ouais, je vais devoir l'utiliser à un moment donné.
Kolob Canyon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.