57 votes

Comment exécuter un programme à partir de la ligne de commande avec des droits élevés ?

Existe-t-il un moyen d'exécuter un programme ou une commande avec des droits élevés lorsque je suis déjà dans une ligne de commande non élevée ?

Exactement la même action qui serait effectuée lorsque je clique sur le raccourci du programme et que je sélectionne Exécuter en tant qu'administrateur .

En runas n'est probablement pas une solution - elle demande un mot de passe, mais je veux juste que la commande UAC dialogue.

68voto

Gedrox Points 2285

Il existe un manière de le faire dans PowerShell :

PS> Start-Process powershell -Verb runAs

14voto

d4ryl3 Points 111

Cela ressemble à cet utilitaire - Début caché - fera ce que vous souhaitez si vous utilisez le commutateur /uac. Voici un exemple de ligne de commande :

hstart /UAC "notepad.exe"

Cela fera apparaître la boîte de dialogue UAC plutôt que de demander un mot de passe comme le fait runas.

enter image description here

9voto

user775093 Points 321

Construire sur Rustam 's responder vous pouvez :

  • Créer un su.bat quelque part dans votre %PATH% par défaut, avec le contenu suivant :
@echo off
setlocal
set cmd=%*
if not defined cmd set cmd=%ComSpec%
powershell iex """start -v runas $Env:cmd"""
  • Ajoutez cette fonction à votre PowerShell $profile : function su {start -verb runas @args}

Vous pouvez maintenant émettre su <command> [parameters] dans l'un ou l'autre des Shell !

3voto

will Points 179

Cela fonctionne pour moi sur toutes les plateformes, y compris Windows 10. Mes besoins sont simples, vous pouvez peut-être adapter l'approche si vous en avez besoin. puissance .

Je suis arrivé avec un petit script nommé, sudo.cmd nommé pour la commande sudo de Linux. Cela fonctionne assez bien, je pense. J'ai décrit les exigences, les étapes à suivre et le script est près du bas avec un exemple. Tout d'abord, un mot d'avertissement.

AVERTISSEMENT : La commande s'exécute par défaut dans le répertoire système de Windows. Vous voudrez cd dans un endroit sûr d'abord.

exigences :

  • Exécuter une commande avec un privilège d'administrateur à partir de Windows .CMD
    ou le cmd-Shell.
  • nécessitent les vérifications normales des privilèges de Windows sur la commande
    • En d'autres termes, la commande ne fonctionnera PAS à moins que je ne sois déjà connecté avec un compte privilégié.
  • Exécutez la commande avec l'autorisation de l'administrateur et continuez quand appelée à l'intérieur d'un script. Attendez donc que la commande se termine.
  • Soyez simple pour que cela fonctionne toujours
  • Ne pas avoir à saisir un mot de passe à chaque fois, si je suis déjà connecté.
    • Un meilleur méthode serait si je peux entrer le mot de passe une fois comme le fait le vrai sudo sous Linux.

solution :

  1. Créer une commande script pour exécuter tous les arguments passés, sudo.cmd
  2. Créez un raccourci Windows pour la commande script nommez-le : sudo.lnk .
  3. Mettez le sudo dans votre PATH Windows pour qu'il soit visible.
  4. Modifiez les propriétés du raccourci, faites le Start in: chemin vide.
  5. Cliquez sur le [ Advanced Bouton -- Vérifier Run as Administrator
  6. Pour permettre des raccourcis dans votre chemin d'accès Windows, utilisez la variable d'environnement PATHEXT, c'est-à-dire

    d:> echo %PATHEXT% .lnk;.EXE;.CMD;.BAT;.COM

Lorsque vous tapez sudo dir sur la ligne de commande, Windows affichera le

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Fenêtre pop-up de contrôle d'accès. Si vous cliquez sur "[ NO ]", rien ne se passera. Windows affichera un " Access is denied. " message.

Lorsque vous cliquez sur "[ YES ]", alors la commande de répertoire s'exécute avec un privilège élevé. Bien sûr, vous voulez probablement quelque chose de plus intéressant comme l'arrêt ou l'interrogation d'un service :

 sudo sc query SDRSVC

SDRSVC est le nom de service pour "Windows Backup service", ce qui montre ce qui suit dans une fenêtre Cmd séparée :

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

En sudo.cmd Le script lui-même est très basique. Comme je l'ai dit, mes besoins sont simples. Je veux juste arrêter et démarrer les services pendant que je déploie le code pour les tests.

sudo.cmd :

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

En pause La commande attend que vous passiez en revue les résultats. Si vous prenez pause la fenêtre d'administration se ferme et vous ne savez pas si la commande a fonctionné ou non. Le site ERRORLEVEL de la commande est également renvoyée.

3voto

Alex Points 505

Cela fonctionne pour Windows 10, je n'ai pas testé avec d'autres versions de Windows.

Un exemple pour ouvrir le bloc-notes avec des droits d'administrateur à partir de cmd.exe qui démarre powershell qui demande les permissions élevées.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Une boîte de dialogue UAC (si elle est activée) apparaîtra avec [Oui] [Non], ou vous demandera le mot de passe de l'administrateur.

Un autre exemple pour ouvrir le fichier hosts avec notepad serait :

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Plus d'informations : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6

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