Comment exécuter un programme en ligne de commande avec des droits élevés

44

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

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

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

Lukas Cenovsky
la source

Réponses:

14

Il semble que cet utilitaire - Hidden Start - 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.

entrez la description de l'image ici

JeffP
la source
2
Attention: ce petit utilitaire coûte 20 $. Pour ceux qui ont une petite poche, utilisez plutôt RunAdmin :)
WeGoToMars
Cela ne vient pas sur Windows 10
sera le
50

Il existe un moyen de faire cela dans PowerShell:

PS> Start-Process powershell -Verb runAs
Rustam
la source
19
Semble bien fonctionner. En ligne de commande, vous pourriez faire par exemplepowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
Marsze
7
Ceci devrait être marqué comme la bonne réponse / meilleure réponse IMO - cela fonctionne sans utilitaire tiers.
Crimbo
5
En se basant sur @marsze - Fwiw, les arguments dans le cas le plus simple entrent dans leur propre valeur unique, par exemple powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Merci!
Ruffin
Comment puis-je canaliser la sortie de l'invite de commande élevée dans mon script en cours d'exécution?
Roues
@Wheeler, je suis presque certain que vous ne pouvez pas faire cela, mais vous pouvez retourner un code de sortie:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam
6

En vous appuyant sur la réponse de Rustam , vous pouvez:

  • Créez un su.batfichier de commandes quelque part dans votre% PATH% par défaut, avec la ligne suivante:@powershell start -verb runas %*
  • Ajoutez cette fonction à votre profil PowerShell $ :function su {start -verb runas @args}

Maintenant, vous pouvez émettre su <command> [parameters]dans l'un ou l'autre shell!

Nicolas Melay
la source
2

RunAdmin est un petit utilitaire (150 Ko) qui vous permet d’exécuter un programme en ligne de commande avec des droits élevés (il indiquera le contrôle de compte d'utilisateur). Et en face de Hidden Start, c’est gratuit.

WeGoToMars
la source
2

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 avez besoin d' énergie .

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

AVERTISSEMENT : la commande est exécutée par défaut dans le répertoire système Windows. Vous voudrez allercddans un endroit sûr en premier.

exigences :

  • Exécutez la commande avec un administrateur privilégié à partir de Windows .CMD
    ou du cmd-shell.
  • nécessite les vérifications normales des privilèges Windows sur la commande
    • En d'autres termes, la commande ne fonctionnera PAS sauf si je suis déjà connecté avec un compte privilégié.
  • Exécutez la commande avec l'autorisation de l'administrateur et continuez lorsqu'elle est appelée dans un script. Attendez donc que la commande soit terminée.
  • Soyez simple pour que ça marche toujours
  • Pas besoin d'entrer un mot de passe à chaque fois, si je suis déjà connecté.
    • Une meilleure méthode serait si je peux entrer le mot de passe une fois, comme le fait la vraie sudocommande sous Linux.

solution :

  1. Créer un script de commande pour exécuter tous les arguments passés, sudo.cmd
  2. Créer un raccourci Windows pour le nom du script de commande , il: sudo.lnk.
  3. Mettez le sudoraccourci dans votre fenêtre PATH afin qu'il puisse être vu.
  4. Editez les propriétés du raccourci, Start in:videz le chemin.
  5. Cliquez sur le Advancedbouton [ ] - VérifierRun as Administrator
  6. Activer les raccourcis dans votre chemin Windows, utilisez la variable d'environnement PATHEXT, à savoir.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Lorsque vous tapez sudo dirsur la ligne de commande, Windows affiche le

User Account Control

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

  [YES]  [NO]

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

Lorsque vous cliquez sur "[ YES]", 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 un arrêt ou une requête sur un service:

 sudo sc query SDRSVC

SDRSVC est le nom du service "Service de sauvegarde Windows". Ce qui suit apparaît dans une fenêtre de commande 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 . . .

Le sudo.cmdscript lui-même est très basique. Comme je l'ai dit, mes besoins sont simples. Je souhaite simplement arrêter et démarrer des services pendant le déploiement du code à des fins de test.

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

La pausecommande attend que vous examiniez les résultats. Si vous supprimez pause, la fenêtre d’administration se ferme et vous ne savez pas si la commande a fonctionné ou non. Le à ERRORLEVELpartir de la commande est également renvoyé.

volonté
la source
2

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

Un exemple pour ouvrir le bloc-notes avec les droits d'administrateur de cmd.exe qui démarre PowerShell et qui demande les autorisations élevées.

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

Cela vous donnera une boîte de dialogue UAC (si elle est activée) 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

Alex
la source
Les arguments de l'exécutable doivent être un -ArgumentListparamètre, pas simplement des paramètres supplémentaires pour démarrer processus.
Appleshell
0

Jetez un coup d'oeil à Start ++ - il a cette fonctionnalité avec beaucoup d'autres choses utiles. Pour exécuter avec l'invite UAC, utilisez simplement sudole nom de votre programme sur la ligne de commande, comme indiqué ci-dessous:

texte alternatif

Voici quelques autres fonctionnalités (vous pouvez également ajouter les vôtres):

texte alternatif

texte alternatif

John T
la source
Ça a l'air bien aussi, mais j'utilise déjà FARR qui a des fonctionnalités similaires à Start ++ et plus (bien sûr sauf sudo).
Lukas Cenovsky
2
Le lien dit Bienvenue à: brandontools.com. Cette page Web est garée GRATUITEMENT. Vous voulez acheter brandontools.com?
xmojmr
1
comme @xmojmr le dit, ce site est mort. Si vous connaissez un nouvel emplacement (je n'en ai pas trouvé si rapidement), vous devez mettre à jour le lien dans la réponse.
Abel
-1

Vous pouvez définir __COMPAT_LAYER=RunAsAdmin. Ensuite, les commandes seront exécutées dans une classe élevée séparée cmd.

Exemple .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Toutes les options du mode de compatibilité sont répertoriées dans la boîte à outils MS Application Compatibility Toolkit.

Michel
la source
Ce fichier de commandes est horriblement cassé. Vous ne pouvez pas utiliser ;comme séparateur de commentaires. "Les fichiers de traitement par lots ne reconnaissent pas le point-virgule et génèrent généralement un message d'erreur concernant une commande incorrecte."
DavidPostill