62 votes

Est-il possible d'exécuter automatiquement un fichier batch en tant qu'administrateur ?

Je me demande s'il est possible de automatiquement ouvrir un fichier batch en tant qu'administrateur lorsque vous double-cliquez sur le fichier batch, car les commandes doivent être exécutées avec des droits d'administrateur.

Note : Je connais déjà la solution consistant à faire un clic droit sur le fichier et à cliquer sur Run As Administrator mais ce n'est pas une solution automatique.

55voto

10100111001 Points 1808

Oui, vous pouvez exécuter un fichier batch avec des droits administratifs. Malheureusement, vous ne pouvez pas le faire directement à partir du fichier batch lui-même. Vous devez d'abord créer un raccourci de ce fichier batch et modifier les propriétés de ce raccourci pour que cela fonctionne.

Pour créer un raccourci, il y a de nombreuses façons, mais la plus simple et la plus rapide est d'utiliser la commande Envoyer à dans le menu contextuel.

Right click batch file > Send to > Desktop (create shortcut)

Bien sûr, vous pouvez envoyer le raccourci où vous le souhaitez. Pour élever le fichier batch afin de l'exécuter en tant qu'administrateur, suivez les étapes ci-dessous :

  1. Cliquez avec le bouton droit de la souris sur le raccourci que vous venez de créer (il doit se trouver sur le bureau ou à l'endroit où vous l'avez envoyé).
  2. Sous l'onglet Raccourci, cliquez sur le bouton Avancé....
  3. Cochez la case Exécuter en tant qu'administrateur et appuyez sur OK à la fois dans la fenêtre modale et dans la fenêtre principale des propriétés.
  4. Exécutez le raccourci en double-cliquant dessus et le fichier batch devrait s'exécuter en tant qu'administrateur.

38voto

user399109 Points 381

Comme indiqué dans une réponse par Ben Gripka à une autre question :

REM --add the following to the top of your bat file--

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------

6voto

fedmich Points 297

Sur Windows 7

  1. Créez un raccourci vers ce fichier Batch

  2. Cliquez avec le bouton droit de la souris sur le fichier de raccourci

  3. Cliquez sur bouton d'avance pour trouver une case à cocher pour l'exécution en tant qu'administrateur

Regardez la capture d'écran ci-dessous

Screenshot

5voto

Ifedi Okonkwo Points 179

La réponse acceptée fonctionne en effet. Mais j'ai constaté que dans Windows 7, je devais supporter la boîte de dialogue UAC chaque fois que le raccourci est cliqué. À mon avis, cela nuit considérablement à l'aspect "automatique" de cette question !

Puis j'ai découvert que dans ma propre situation, la .bat Le fichier en question doit être exécuté par le planificateur de tâches. Dans ce cas, la vérification de l'option Run with highest privileges sur l'option General l'onglet de la tâche, s'occupe joliment du problème. Le site .bat est ensuite exécuté en tant qu'administrateur sans aucun problème.

PS : Je n'avais pas réalisé que je ne pouvais pas télécharger d'images sur cette réponse, parce que j'ai une jolie petite capture d'écran juste à côté de moi ! Ou est-ce que je peux ?

4voto

Artur Zgadzaj Points 41

Vous pouvez utiliser mon script Batch_Admin pour élever automatiquement l'Administrateur pour l'utilisation dans n'importe quel type de Batch propre script, ou BAT ou .CMD. Cette fonction assure le travail sur un environnement standard, avec des outils standard et de la même manière dans différents systèmes Windows. Elle utilise plusieurs commandes standard et intégrées de Windows. N'utilisez pas d'autres script externes. Il peut être utilisé pour appeler n'importe quel programme en tant qu'administrateur, pas seulement script Batch. Il suffit de créer un petit script, qui appelle ensuite le programme qui requiert la permission Administartor. Placez ceci dans n'importe quel dossier PATH de recherche (à partir de %PATH%).

Pour l'utiliser, il suffit d'insérer la ligne suivante (exactement comme) dans son lot parent Batch script, qui doit être exécuté en tant qu'Administrateur. Il est préférable de le faire en haut de notre script parent et il est préférable que d'abord, qui sera appelé via le CALL plus loin, quelques sous-script (voir explication détaillée ci-dessous).

net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Il peut être inséré à l'intérieur de n'importe quel scripts enfant, appelé par la syntaxe CALL. Pour afficher un message alors qu'il n'a pas encore les privilèges d'Administrateur, par exemple pendant 5 secondes avant d'appeler Batch_Admin définissez la variable "ShowAdminInfo" sur le nombre de secondes

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Alors comment ça marche :

- Appelle UAC.ShellExecute via VBScript pour récupérer les autorisations de l'utilisateur.

- Exécute en lot le script, ou BAT ou CMD

- L'appelant script peut avoir un long espace de nom inclus dans l'appel entre guillemets.

- Rendre tous les paramètres appeler le maître script passé de la ligne de commande, comme s'il n'y avait pas de transmission de l'appel et commencer quelque chose à partir de zéro, aussi avec des caractères spéciaux, comme les points d'exclamation ( !) et le pourcentage (%), et aussi avec des parenthèses ().

- Détient un emplacement maître script si l'appel a eu lieu dans le répertoire où ce script est le maître.

- L'auxiliaire affiche un message si l'on définit devant soi la variable "ShowAdminInfo", par exemple pendant 5 secondes ce qui peut empêcher le passage immédiat des droits de l'Administrateur donnant des informations supplémentaires et la possibilité d'une décision éclairée. Exemples de réglages à effectuer : SET ShowAdminInfo=5 Par défaut, comme cette variable n'est pas définie, elle ne s'affiche pas.

- Le script s'appelle aussi dans le chemin de recherche du système % PATH% et à partir de la ressource réseau, comme : \Computer\share\test.bat

- Evite les malentendus dans l'écriture des fichiers auxiliaires nécessaires lorsque le script appelle plusieurs Batch_Admin presque en même temps. Il utilise le nombre aléatoire de 1 à 100

- Mais, le mieux est de l'utiliser sur le script parent. Le passage aux droits d'Administrateur nécessite toujours de relancer complètement le script, dans une nouvelle fenêtre, dans un nouvel environnement, sans avoir recours aux les variables sont définies précédemment dans notre script et les valeurs de ces variables ne passaient pas alors pour appeler en tant qu'Administrateur. Juste le script sera exécuté à nouveau.

Ci-dessous un script complet de Batch_Admin. Des informations plus complètes à ce sujet se trouvent sur mon site.

Copiez le texte suivant dans le Bloc-notes et enregistrez-le sur le disque sous le nom de : Batch_Admin.bat

@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)

::  A D M I N I S T R A T O R   - Automatically get admin rights for script batch. Paste this on top:    net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*
::                                Also keep Batch directory localisation and then set variable:   PATH_BAT
::                                if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
::                                Elaboration:  Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion

SET "Localy="
if exist "%~1"      SET "Localy=YES"
if exist "%~1.BAT"  SET "Localy=YES"
if exist "%~1.CMD"  SET "Localy=YES"
if defined Localy   FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"

 SET P1=%~1
 SET Parameters=%*
 SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
 SET Parameters=!Parameters:%P1%=!
 SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
 SET Parameters=%Parameters:~3%

net session >nul 2>nul&if not errorlevel 1  goto Administrator_OK

if not defined ShowAdminInfo   goto skip_message_Administrator
echo.
echo Script:  %~1
echo.
echo *****************************************************************
echo ***    R U N N I N G     A S     A D M I N I S T R A T O R    ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo          shortcut ^> Advanced ^> Running as Administrator
echo.
echo     Alternatively run once "As Administrator"
echo     or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch  %ShowAdminInfo%  seconds ...
TIMEOUT /T %ShowAdminInfo% > nul

:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1

SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat"  SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul

echo @SET "PATH_BAT=%PATH_BAT%"               > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%"    >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy  (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"

echo SET UAC = CreateObject^("Shell.Application"^)                                   > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B

:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R  - Automatically get admin rights  (The End)  ***

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X