web-dev-qa-db-fra.com

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

Je me demande s’il est possible d’ouvrir automatiquement un fichier de commandes en tant qu’administrateur en double-cliquant dessus, car les commandes doivent être exécutées avec des droits d’administrateur.

Remarque: je connais déjà la solution consistant à cliquer avec le bouton droit de la souris sur le fichier et à cliquer sur Run As Administrator, mais ce n'est pas une solution automatique.

43
Antp

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

Pour créer un raccourci, il existe plusieurs façons, mais la plus simple et la plus rapide consiste à utiliser l'option 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 de commandes à exécuter en tant qu'administrateur, procédez comme suit:

  1. Cliquez avec le bouton droit sur le raccourci que vous venez de créer (vous devriez le trouver sur le bureau ou à l'endroit où vous l'envoyez).
  2. Sous l'onglet Raccourci, cliquez sur le bouton Avancé ....
  3. Cochez la case Exécuter en tant qu'administrateur et appuyez sur OK pour la fenêtre modale et la fenêtre de propriétés principale.
  4. Exécutez le raccourci en double-cliquant dessus et le fichier de commandes doit être exécuté en tant qu'administrateur.
39
10100111001

Tel que publié dans une réponse de 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"
:--------------------------------------
28
user399109

sur Windows 7

  1. Créer un raccourci vers ce fichier batch

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

  3. Cliquez sur le bouton avance pour trouver une case à cocher pour exécuter en tant qu'administrateur

Vérifiez la capture d'écran ci-dessous

Screenshot

4
fedmich

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

Pour l'utiliser, il vous suffit d'insérer la ligne suivante (exactement comme) dans son script Batch parent, qui doit être exécuté en tant qu'administrateur. Ceci est mieux fait en haut de notre script parent et il est préférable d’abord, qui sera appelé via l’appel CALL, quelques sous-scripts (voir explication détaillée ci-dessous).

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

Cela peut être inséré dans n'importe quel script enfant, appelé par la syntaxe CALL. Pour afficher un message alors qu'il est toujours sans 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 obtenir les autorisations des utilisateurs.

• Batch exécute le script, ou BAT ou CMD

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

• Rendez tous les paramètres, le script maître passé depuis la ligne de commande, comme s'il n'y avait pas eu de transmission de l'appel et démarrez à partir de zéro, également avec des caractères spéciaux, comme des points d'exclamation (!) Et des pourcentages (%), et avec des parenthèses ()

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

• Auxiliary affiche un message si nous définissons avant nous-mêmes la variable "ShowAdminInfo", par exemple. pendant 5 secondes, ce qui peut empêcher le transfert immédiat des droits de l'administrateur donnant des informations supplémentaires et la possibilité d'une décision éclairée. Exemples de paramètres à définir: SET ShowAdminInfo = 5 Par défaut, cette variable n'étant pas définie, elle ne s'affiche pas.

• Le script appelle également dans le chemin de recherche système% PATH% et à partir d'une ressource réseau, telle que:\Computer\share\test.bat

• Évite les malentendus lors de l'écriture des fichiers auxiliaires nécessaires lorsque le script appelle plusieurs Batch_Admin presque simultanément. Il utilise le nombre aléatoire de 1 à 100

• Mais le mieux est de l’utiliser sur un script parent. La transition vers les droits d’administrateur nécessite toujours de réexécuter complètement le script, dans une nouvelle fenêtre, dans un nouvel environnement, sans recourir aux variables précédemment définies dans notre script et les valeurs de ces variables ne sont pas passées à appeler en tant qu’administrateur . Juste le script sera exécuté à nouveau.

Ci-dessous un script complet Batch_Admin. Des informations détaillées à ce sujet se trouvent sur mon site.

Copiez le texte suivant dans le Bloc-notes et enregistrez-le sur le disque en tant que: 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)  ***
3
Artur Zgadzaj

La réponse acceptée fonctionne effectivement. Mais j’ai trouvé que dans Windows 7, je devais supporter la boîte de dialogue UAC à chaque clic sur le raccourci. Cet IMHO diminue considérablement le "automatiquement" dans cette question!

Ensuite, j’ai trouvé que, dans ma situation personnelle, le fichier .bat en question devait être exécuté par le Planificateur de tâches. Dans ce cas, la vérification de l'option Run with highest privileges dans l'onglet General de la tâche permet de résoudre le problème. Le .bat est ensuite exécuté en tant qu'administrateur sans tracas.

PS: Je n'avais pas réalisé que je ne pouvais pas télécharger d'images sur cette réponse, car j'ai maintenant une jolie petite capture d'écran avec moi! Ou puis-je?

3
Ifedi Okonkwo
@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"  
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"  
    "%temp%\getadmin.vbs"  
    exit /B
:gotAdmin  
chkdsk

Cela fonctionne égalementSOURCE: https://social.technet.Microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-insev-inside-cmdbatch -file

1

Vous pouvez également créer un deuxième fichier de commandes, ce qui pourrait vous permettre d'exécuter n'importe quoi en tant qu'administrateur, tout en entrant le mot de passe de l'administrateur une seule fois. Le mot de passe est enregistré dans un jeton d'authentification et nécessite un certain savoir-faire informatique.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
1
Brapapple

Vous pouvez utiliser un utilitaire de ligne de commande elevate . (lien de téléchargement - https://drive.google.com/open?id=0Bz7qe_olclTwVGZLUklFMHNxQ00 )

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
0
T.Todua

C'est un exemple pour exécuter la batte en tant qu'administrateur. Ça marche pour moi.

Ça va comme ça:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause
0
JoshMoreNo