Comment coder un fichier BAT pour qu'il s'exécute toujours en mode administrateur?

149

J'ai cette ligne dans mon fichier BAT:

"Example1Server.exe"

Je voudrais l'exécuter en mode administrateur. Comment modifier le code de la chauve-souris pour l'exécuter en tant qu'administrateur?

Est-ce correct? Dois-je mettre les citations?

runas /user:Administrator invis.vbs Example1Server.exe
Karikari
la source

Réponses:

71

Vous utilisez runaspour lancer un programme en tant qu'utilisateur spécifique:

runas /user:Administrator Example1Server.exe
Kerrek SB
la source
6
@karikari: Un nom comme celui-ci ( Example1Server.exe) n'a pas besoin d'être mis entre guillemets, mais dans certains autres cas (comme les espaces dans le nom :) Example1 Server.exevous en auriez vraiment besoin. Vous pouvez cependant utiliser les citations même si elles ne sont pas nécessaires.
Andriy M
18
Le compte administrateur peut ne pas être nommé Administrator
Anders
9
@Anders: Non, peut-être pas; Je suppose que l'OP peut "repérer le modèle". Ce n'était pas une réponse plz-give-me-teh-codez: -S Au fait, je devrais ajouter que l'OP pourrait vouloir une commande plus élaborée comme runas /User:abc "csript myscript.vbs", ou runas /User:abc "cmd /c start ...".
Kerrek SB
16
Je crains que cette réponse ne soit pas ce que veulent 90% des visiteurs, car c'est encore plus difficile qu'un clic droit -> exécuter en tant qu'administrateur, même si c'est techniquement correct. Vérifiez à nouveau l'autre réponse. C'est exactement ce que la plupart voudront.
j riv
13
Non, cette réponse est techniquement incorrecte. L'exécution en tant qu'administrateur n'est pas la même chose que l'exécution sous un utilisateur dont le nom se trouve être Administrateur et les privilèges sont différents. Voir l'autre réponse.
Alexander Gelbukh
370

L'autre réponse nécessite que vous saisissiez le mot de passe du compte administrateur. En outre, l'exécution sous un compte dans le groupe d'administrateurs n'est pas la même chose que l' exécution en tant qu'administrateur voir: UAC sur Wikipedia

Instructions pour Windows 7

Afin de fonctionner en tant qu'administrateur, créez un raccourci pour le fichier de commandes.

  1. Cliquez avec le bouton droit sur le fichier de commandes et cliquez sur copier
  2. Accédez à l'endroit où vous voulez le raccourci
  3. Cliquez avec le bouton droit sur l'arrière-plan du répertoire
  4. Sélectionnez Coller le raccourci

Ensuite, vous pouvez définir le raccourci pour qu'il s'exécute en tant qu'administrateur:

  1. Faites un clic droit sur le raccourci
  2. Choisissez les propriétés
  3. Dans l'onglet Raccourci, cliquez sur Avancé
  4. Cochez la case "Exécuter en tant qu'administrateur"
  5. Cliquez sur OK, OK

Maintenant, lorsque vous double-cliquez sur le raccourci, il vous invite à confirmer l'UAC, puis à exécuter en tant qu'administrateur (ce qui, comme je l'ai dit ci-dessus, est différent de l'exécution sous un compte dans le groupe d'administrateurs)

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

Capture d'écran

Remarque: lorsque vous procédez à Exécuter en tant qu'administrateur, le répertoire actuel (chemin) ne sera pas le même que le fichier bat. Cela peut entraîner des problèmes dans de nombreux cas où le fichier bat se réfère à des fichiers relatifs à côté. Par exemple, dans mon Windows 7, le répertoire cur sera SYSTEM32 au lieu de l'emplacement du fichier bat! Pour contourner le problème , vous devez utiliser

cd "%~dp0"

ou mieux

pushd "%~dp0"

pour vous assurer que cur dir est sur le même chemin que celui du fichier bat.

Ed Greaves
la source
8
Ah, c'était caché en effet (la plupart d'entre nous ne pensaient pas que ce bouton avancé avait cette option). Je suis presque sûr que quiconque a pensé à l'autre réponse complexe ne le savait pas. C'est la réponse que 90% + des visiteurs voudront.
j riv
1
Je suis d'accord. cela devrait être la réponse. J'ai également ajouté une capture d'écran pour faciliter la recherche du bouton d' avance
fedmich
1
Cela s'applique également à Windows Server 2012 R2.
garec
3
Cela ne fonctionne pas pour moi sous Windows 10 ou Windows 7. Lorsque j'essaie de m'exécuter en tant qu'administrateur, soit en cliquant avec le bouton droit sur le fichier BAT et "Exécuter en tant qu'administrateur", soit en utilisant la technique décrite ici, le fichier de commandes s'ouvre pendant une seconde puis se ferme immédiatement sans aucune commande ou aucun programme dans le fichier de commandes en cours d'exécution. J'ai essayé d'exécuter des fichiers batch très simples qui font juste écho à un "Hello World" et ils échouent aussi de cette manière. C'est très frustrant. Jusqu'à présent, je n'ai pas été en mesure de trouver une solution.
Jonathan Elkins
1
@JonathanElkins avez-vous essayé d'ajouter une pause à la fin du fichier batch?
Ed Greaves
32

Ajoutez simplement ceci en haut de votre fichier bat:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

Il passera à admin et restera également dans le bon répertoire. Testé sur Windows 10.

Sire
la source
1
Testé sous Windows 7 et fonctionne très bien. Mais pouvez-vous expliquer ce qu'il fait? Je ne connais pas les fichiers chauve-souris.
Sunfloro
1
Il crée un fichier VBScript avec du code qui vous élève au rang d'administrateur (si vous ne l'êtes pas déjà) et exécute à nouveau le fichier bat, cette fois en tant qu'administrateur.
Père
1
Ce que je recherche exactement! aucun changement supplémentaire ou fichier supplémentaire requis!
MSS
1
qu'est-ce que getadmin.vbs?
Kiquenet le
4
Ajouter vos deux lignes de code à mon fichier batch existant est une bonne solution pour moi. Je devais également ajouter exità la fin de mon fichier de commandes ou je resterais à l'invite. C'est probablement parce que le .vbs lance une deuxième invite de commande.
Ben le
10

Si vous pouvez utiliser un utilitaire tiers, voici un elevateutilitaire de ligne de commande .

Voici la description de l'utilisation:

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
aphorie
la source
elevate.exerochers!
Sangbok Lee
8

Vous pouvez utiliser nircmd.exe « s Elevate commande

Référence de commande NirCmd - elevate

elevate [Program] {Command-Line Parameters}

Pour Windows Vista / 7/2008 uniquement: exécutez un programme avec des droits d'administrateur. Lorsque le [Programme] contient un ou plusieurs espaces, vous devez le mettre entre guillemets.

Exemples:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS: je l'utilise sur win 10 et ça marche

Dheeraj Bhaskar
la source
6

convertissez votre fichier batch en .exe avec cet outil: http://www.battoexeconverter.com/ alors vous pouvez l'exécuter en tant qu'administrateur

xxedxx
la source
2
Gardez à l'esprit que de nombreux antivirus sont extrêmement sensibles aux fichiers exe construits de cette façon. "convertir / crypter" les fichiers batch de cette manière est une ancienne méthode utilisée par les programmes malveillants.
Hamy
Si vous analysez ce domaine à l'aide de Symantec - Type de menace: autre logiciel malveillant Raison de la menace: domaine signalé et vérifié comme logiciel malveillant. Identifié comme domaine ou URL malveillant.
Dimanche
Mauvaise suggestion!
Vlad le
6
go get github.com/mattn/sudo

ensuite

sudo Example1Server.exe
Mattn
la source
6

Je pense avoir une solution au problème du mot de passe. Cet argument unique est vraiment incroyable. Il demande le mot de passe une fois, et ne le redemande plus. Même si vous le mettez dans un autre programme, il ne vous demandera pas le mot de passe. C'est ici:

runas /user:Administrator /savecred Example1Server.exe

Anonyme
la source
4
  1. Mes expérimentations indiquent que la commande runas doit inclure le domaine de l'utilisateur administrateur (du moins dans la configuration environnementale de mon organisation):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    Si vous ne connaissez pas déjà le domaine de l'utilisateur administrateur, exécutez une instance de l'invite de commande en tant qu'utilisateur administrateur et entrez la commande suivante:

    echo %userdomain%
    
  2. Les réponses fournies par Kerrek SB et Ed Greaves exécuteront le fichier cible sous l'utilisateur admin mais, si le fichier est un script de commande (fichier .bat) ou un script VB (fichier .vbs) qui tente d'opérer sur la connexion normale l'environnement de l'utilisateur (comme la modification des entrées de registre), il se peut que vous n'obteniez pas les résultats souhaités car l'environnement dans lequel le script s'exécute réellement sera celui de l'utilisateur admin, et non de l'utilisateur à connexion normale! Par exemple, si le fichier est un script qui opère sur la ruche HKEY_CURRENT_USER du registre, «l'utilisateur actuel» concerné sera l'utilisateur admin et non l'utilisateur avec connexion normale.

pstraton
la source
0

Utilisez le lecteur physique complet \ chemin d'accès à votre fichier de commandes cible dans les propriétés du raccourci.

Cela ne fonctionne pas sous Windows 10 si vous utilisez des lecteurs de substitution comme j'ai essayé de le faire au début ...

Samiamias
la source