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


48

Je me demande s’il est possible d’ ouvrir automatiquement un fichier de commandes en tant qu’administrateur lorsque vous double-cliquez sur le fichier de commandes, 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.



J'ai pu obtenir que cela fonctionne pour moi: stackoverflow.com/a/13811519/27928
Rohit

2
comment deux clics gauche sont-ils plus automatiques qu'un clic gauche et un clic droit?
Jiggunjer

Réponses:


44

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 à du 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.

1
Vous pouvez toujours forcer le fichier de commandes à appeler le raccourci et lui faire passer un paramètre pour ne pas appeler le raccourci. Vous pouvez insérer quelque chose comme if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFci @echo off- dessous , et créer le lien de raccourci au program.bat alieu de juste program.bat.
Trlkly

2
Ifedi écrit: "La réponse acceptée [celle de Tech1337] fonctionne effectivement. Mais j'ai constaté que sous Windows 7, je devais supporter la boîte de dialogue UAC chaque fois que l'utilisateur cliquait sur le raccourci". <- Bien que quelqu'un d'autre dise que cela fonctionne sans UAC
barlop

Pour moi, le raccourci ne s’exécute pas dans le répertoire en cours lorsque vous double-cliquez, mais le fichier .bat le fait. Même avec la propriété "Démarrer dans:" du raccourci renseigné. Assurez-vous donc que votre .bat spécifie les chemins de fichiers complets.
Rob Mosher le

29

Tel que posté 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"
:--------------------------------------

Oui, j'ai trouvé cela et je l'utilise couramment. Merci quand même!
Antp

Essentiellement ce que je cherchais. Espérait-il qu'il y ait un moyen de faire cela sans utiliser VB?
Chef Pharaoh

@ChefPharaoh cela crée une console élevée pour exécuter le fichier de commandes. Vous pouvez faire la même chose avec un script PowerShell.
Jiggunjer

C'était la meilleure réponse pour moi.
Kasperhj

4

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 mon cas, le .batfichier en question devait être exécuté par le Planificateur de tâches. Dans ce cas, cochez l' Run with highest privilegesoption sur l' Generalonglet de la tâche pour résoudre le problème. Le .batest 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 une jolie petite capture d'écran assise avec moi maintenant! Ou puis-je?


2
Si vous ajoutez des liens aux images, une personne les y insère.
Ramhound

@Ramhound. Ajouter des liens aux images? L'image est sur mon bureau, pas quelque part en ligne. Ou, sûrement je manque quelque chose?
Ifedi Okonkwo

Oui; Vous les téléchargez; Vous ne pouvez simplement pas insérer les captures d'écran dans votre réponse.
Ramhound

Soit ce bouton de téléchargement n'était pas là, soit j'étais hier à moitié aveugle! Je suis sûr que c'était le dernier. Quoi qu'il en soit, j'ai très bien complété le téléchargement du fichier, mais on m'a dit qu'il me fallait un représentant de 10 pour publier des images. Merci quand même.
Ifedi Okonkwo

Vous pouvez toujours placer le lien dans la réponse si.
Ramhound

4

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

Capture d'écran


1
Vous dites la même chose que la réponse acceptée.
Antp

Oui, je voulais juste créer une simple liste avec une capture d'écran pour tous ceux qui sont pressés.
fedmich

3
Si quelqu'un est pressé, je doute qu'il fasse défiler l'écran vers le bas pour la réponse. Merci quand même
Antp

3

Vous pouvez utiliser mon script Batch_Admin pour élever automatiquement l'administrateur à utiliser dans n'importe quel type de script propre à Batch, 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 vaut mieux d'abord, qui sera appelé via l'appel, quelques sous-scripts (voir l'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 (%), ainsi que 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: \ Ordinateur \ partage \ test.bat

• Empêche les malentendus dans 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)  ***

Je pense que cela est similaire ou identique à la réponse ci-dessus: superuser.com/a/852877/375935
jiggunjer

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
@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 aussi SOURCE: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file


Pouvez-vous expliquer votre solution?
scai

1
Une autre version de superuser.com/a/852877/375935
mercredi

0

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

Cela n'amène-t-il pas un panal UAC?
Antp

cela soulève ... cependant, c'est mieux que rien (voir "accès refusé" ..)
T.Todua

Pas vraiment "automatique" cependant, n'est-ce pas
Antp

0

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

Bienvenue sur Super User! Bien que cela puisse répondre à la question, ce serait une meilleure réponse si vous pouviez expliquer pourquoi .
DavidPostill

Encore une autre variante de superuser.com/a/852877/375935
mercredi
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.