148 votes

Comment détecter si CMD s'exécute en tant qu'administrateur/possède des privilèges élevés ?

À l'intérieur d'un fichier batch, j'aimerais tester si je fonctionne avec des privilèges d'administrateur/élevés.

Le nom d'utilisateur ne change pas lorsque l'option "Exécuter en tant qu'administrateur" est sélectionnée, ce qui ne fonctionne donc pas.

S'il existait une commande universellement disponible, qui n'a aucun effet, mais qui nécessite des privilèges administratifs, je pourrais l'exécuter et vérifier un code d'erreur afin de tester les privilèges. Jusqu'à présent, je n'ai pas trouvé une telle commande. Les commandes que j'ai trouvées semblent renvoyer un code d'erreur unique et non spécifique, qui peut indiquer n'importe quoi, et elles sont susceptibles d'échouer pour diverses raisons.

Je ne m'intéresse qu'à Windows 7, mais la prise en charge des systèmes d'exploitation antérieurs serait appréciable.

8voto

user2848327 Points 31

Voici une légère modification de la réponse de Harry qui se concentre sur le statut élevé ; je l'utilise au début d'un fichier install.bat :

set IS_ELEVATED=0
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" | findstr /c:"Enabled group" > nul: && set IS_ELEVATED=1
if %IS_ELEVATED%==0 (
    echo You must run the command prompt as administrator to install.
    exit /b 1
)

Cela a fonctionné pour moi et le principe semble valable. Chris Jackson de MSFT :

Lorsque vous exécutez elevated, votre token contient un ACE appelé Mandatory Label (étiquette obligatoire). \High Niveau obligatoire.

8voto

ipAlex Points 71

La solution :

at >nul
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )

ne fonctionne pas sous Windows 10

pour toutes les versions de Windows :

openfiles >nul 2>&1
if %ErrorLevel% equ 0 ( echo Administrator ) else ( echo NOT Administrator )

7voto

GeoffH Points 93

J'ai lu beaucoup (la plupart ?) des réponses, puis j'ai développé un fichier bat qui fonctionne pour moi sous Win 8.1. J'ai pensé le partager.

setlocal
set runState=user
whoami /groups | findstr /b /c:"Mandatory Label\High Mandatory Level" > nul && set runState=admin
whoami /groups | findstr /b /c:"Mandatory Label\System Mandatory Level" > nul && set runState=system
echo Running in state: "%runState%"
if not "%runState%"=="user" goto notUser
  echo Do user stuff...
  goto end
:notUser
if not "%runState%"=="admin" goto notAdmin
  echo Do admin stuff...
  goto end
:notAdmin
if not "%runState%"=="system" goto notSystem
  echo Do admin stuff...
  goto end
:notSystem
echo Do common stuff...
:end

J'espère que quelqu'un trouvera cela utile :)

4voto

tivnet Points 115

Une version "sans une ligne" de https://stackoverflow.com/a/38856823/2193477

@echo off
net.exe session 1>NUL 2>NUL || goto :not_admin
echo SUCCESS
goto :eof

:not_admin
echo ERROR: Please run as a local administrator.
exit /b 1

1voto

user1 Points 75

Je sais que je suis vraiment en retard, mais voici ma première ligne pour déterminer le statut d'administrateur.

Il ne s'appuie pas sur le niveau d'erreur, mais uniquement sur les éléments suivants systeminfo :

for /f "tokens=1-6" %%a in ('"net user "%username%" | find /i "Local Group Memberships""') do (set admin=yes & if not "%%d" == "*Administrators" (set admin=no) & echo %admin%)

Il renvoie soit oui, soit non, en fonction du statut d'administrateur de l'utilisateur...

Il définit également la valeur de la variable "admin" pour qu'elle soit égale à oui ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X