web-dev-qa-db-fra.com

Comment ouvrir un cmd surélevé à l'aide de la ligne de commande pour Windows?

Comment puis-je ouvrir une invite de commande élevée à l'aide de lignes de commande sur une cmd normale?

Par exemple, j'utilise runas /username:admin cmd mais la cmd qui a été ouverte ne semble pas être élevée! Des solutions?

87
user2633882

J'ai rencontré le même problème et la seule façon dont j'ai pu ouvrir le CMD en tant qu'administrateur de CMD a été la suivante:

  1. CMD ouvert
  2. Écrivez powershell -Command "Start-Process cmd -Verb RunAs" et appuyez sur Enter
  3. Une fenêtre pop-up apparaîtra vous demandant d'ouvrir un CMD en tant qu'administrateur
147
Gui

Selon documentation , le modèle de sécurité Windows ...

n'accorde pas de privilèges administratifs à tout moment. Même les administrateurs s'exécutent sous des privilèges standard lorsqu'ils effectuent des tâches non administratives qui ne nécessitent pas de privilèges élevés.

Vous avez l'option Créer cette tâche avec des privilèges administratifs dans le dialogue Créer une nouvelle tâche ( Gestionnaire de tâches > Fichier> Exécuter une nouvelle tâche ), mais il n’existe aucun moyen intégré d’élever efficacement les privilèges à l’aide de la ligne de commande.

Cependant, il existe certains outils tiers (s'appuyant en interne sur les API Windows) que vous pouvez utiliser pour élever les privilèges à partir de la ligne de commande:

NirCmd :

  1. Téléchargez-le et décompressez-le.
  2. nircmdc elevate cmd

windos :

  1. Installez-le: npm install -g windosu (nécessite node.js installé)
  2. Sudo cmd
34
Ricardo Stuven

Manière simple je l'ai fait après avoir essayé d'autres réponses ici

Méthode 1: SANS programme tiers (je l'ai utilisé)

  1. Créez un fichier nommé Sudo.bat (vous pouvez remplacer Sudo par le nom de votre choix) avec le contenu suivant powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Déplacez Sudo.bat dans un dossier de votre PATH; si vous ne savez pas ce que cela signifie, déplacez simplement ces fichiers vers c:\windows\
  3. Maintenant, Sudo fonctionnera dans la boîte de dialogue Exécuter (win+r) ou dans la barre d'adresse de l'explorateur (c'est la meilleure partie :))

Méthode 2: AVEC un programme tiers

  1. Téléchargez NirCmd et décompressez-le.
  2. Créez un fichier nommé Sudo.bat (vous pouvez remplacer Sudo par le nom de votre choix) avec le contenu suivant nircmdc elevate cmd /k "cd /d %cd%"
  3. Déplacez nircmdc.exe et Sudo.bat dans un dossier de votre PATH; si vous ne savez pas ce que cela signifie, déplacez simplement ces fichiers vers c:\windows\
  4. Maintenant, Sudo fonctionnera dans la boîte de dialogue Exécuter (win+r) ou dans la barre d'adresse de l'explorateur (c'est la meilleure partie :))
20
Dheeraj Bhaskar

Je n'ai pas assez de réputation pour ajouter un commentaire à la première réponse, mais avec la puissance des alias, vous pouvez vous en tirer en tapant simplement ce qui suit:

powershell "start cmd -v runAs"

Ceci est juste une version plus courte de l'excellente solution user3018703:

powershell -Command "Start-Process cmd -Verb RunAs"
20
Stiegler

J'utilise des programmes nirsoft (par exemple, nircmdc) et sysinternals (par exemple, psexec) tout le temps. Ils sont très utiles.

Mais si vous ne voulez pas, ou ne pouvez pas, créer un programme tiers, voici une autre solution, Windows pur.

Réponse courte : vous pouvez créer une tâche planifiée avec des privilèges élevés que vous pourrez ensuite appeler ultérieurement sans être élevée.

Réponse de longueur moyenne : avec une tâche élevée, créez une tâche avec (mais je préfère l'interface graphique du planificateur de tâches):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Plus tard, aucune élévation nécessaire, invoquez avec

schtasks /run /tn cmd_elev

Réponse longue : Il y a beaucoup de détails agités; voir mon entrée de blog "Démarrer le programme SANS UAC, utile au démarrage du système et dans des fichiers de commandes (utiliser le planificateur de tâches)" "

11
john v kumpf

En tant que fichier de commandes, la commande suivante ouvre une invite de commande élevée avec le chemin d'accès défini dans le même répertoire que celui à partir duquel le fichier de commandes a été appelé

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
5
statler

J'utilise Elevate depuis un moment maintenant.

Sa description - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Je copie le bin.x86-64\elevate.exe du .Zip dans C:\Program Files\elevate et ajoute ce chemin à mon PATH.

Ensuite, GitBash je peux exécuter quelque chose comme elevate sc stop W3SVC pour désactiver le service IIS.

L'exécution de la commande me donne la boîte de dialogue UAC, correctement focalisée avec le contrôle du clavier et après acceptation de la boîte de dialogue, je retourne à mon shell.

3
seangwright

Faites en sorte que le fichier de commandes enregistre les informations d'identification du compte administrateur réel à l'aide du commutateur /savecred. Ceci demandera les informations d'identification pour la première fois, puis stockera le mot de passe crypté dans le gestionnaire d'informations d'identification. Ensuite, pour toutes les exécutions ultérieures du lot, il sera exécuté en tant qu'administrateur complet mais pas en tant qu'Invite pour les informations d'identification car elles sont stockées cryptées dans le gestionnaire d'informations d'identification et que l'utilisateur final ne peut pas obtenir le mot de passe. Ce qui suit devrait ouvrir un CMD élevé avec des privilèges d’administrateur complets et ne demandera le mot de passe que la première fois:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
3
Stefan Gadecki

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var Shell = new ActiveXObject('Shell.application'); Shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

enregistrez ce script sous le nom "god.cmd" dans votre system32 ou quel que soit votre chemin d'accès ....

si vous ouvrez un cmd dans e:\mypictures\et tapez dieu, il vous demandera des informations d'identification et vous remettra au même endroit que l'administrateur ...

3
jOte-

Semblable à certaines des solutions ci-dessus, j'ai créé un fichier de commandes elevate qui exécute une fenêtre PowerShell élevée, contournant la stratégie d'exécution pour permettre tout, des simples commandes aux fichiers de commandes en passant par les scripts PowerShell complexes. Je vous recommande de le coller dans votre dossier C:\Windows\System32 pour faciliter l’utilisation.

La commande d'origine elevate exécute sa tâche, capture la sortie, ferme la fenêtre PowerShell générée, puis revient en écrivant la sortie capturée dans la fenêtre d'origine.

J'ai créé deux variantes, elevatep et elevatex, qui font respectivement une pause et gardent la fenêtre PowerShell ouverte pour plus de travail.

https://github.com/jt-github/elevate

Et au cas où mon lien mourrait, voici le code du fichier batch Elevate original:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)
2
Shadow Lynx

Bien que les deux solutions fournies par Dheeraj Bhaskar fonctionnent, elles aboutiront malheureusement à la boîte de dialogue UAC (en ordre de z) mais pas à obtenir focalisé (la fenêtre focalisée est la fenêtre de l'appelant cmd/powershell), je dois donc soit saisir la souris et cliquer sur "oui", soit sélectionner la fenêtre du contrôle de compte d'utilisateur à l'aide des touches Alt + Maj + Tab. (Testé sur Win10x64 v1607 build14393.447; UAC = "[...] ne pas assombrir [...]" .)

La solution suivante est un peu délicate car elle utilise deux fichiers, mais elle conserve le bon ordre de focus, de sorte qu'aucune action souris/clavier supplémentaire n'est requise (à part confirmer la boîte de dialogue UAC: Alt + Y ).

  1. cmdadm.lnk (propriétés de raccourci/Avancé .../Exécuter en tant qu'administrateur = ON) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Exécuter avec su.

2
Ogmios

Ma méthode préférée consiste à utiliser PsExec.exe de SysInternals, disponible à l’adresse http://technet.Microsoft.com/en-us/sysinternals/bb89755

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

Le commutateur "-h" est celui qui fait la magie:

-h Si le système cible est Vista ou une version ultérieure, le processus est-il exécuté avec le jeton élevé du compte, s'il est disponible.

2
David Rodriguez

Peut utiliser une variable d'environnement temporaire à utiliser avec un raccourci surélevé (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (raccourci)

_ properties\advanced\"run as administrator"=yes

(pour modifier le chemin, vous devez créer temporairement le env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (targetCmd est exécuté dans une fenêtre cmd élevée)

Bien qu'il s'agisse de 3 fichiers, vous pouvez tout placer (y compris targetCmd) dans un sous-dossier (n'oubliez pas d'ajouter le folderName aux correctifs) et renommer "start.cmd" en un seul nom.

Pour moi, cela ressemble à la manière la plus native de faire cela, alors que cmd n'a pas la commande nécessaire

0
ilia

Je ne suis pas sûr que l'outil ExecElevated.exe (13 Ko) fera l'affaire, mais il se peut que ce soit le cas. Ou du moins être utile pour les personnes ayant des besoins similaires qui sont venues sur cette page comme moi (mais je n’ai pas trouvé la solution, j’ai donc créé l’outil moi-même en .Net).

Il exécutera une application avec un jeton élevé (en mode administrateur). Mais vous obtiendrez une boîte de dialogue UAC pour confirmer! (Peut-être pas si le contrôle de compte d'utilisateur a été désactivé, ne l'a pas testé).

Et le compte qui appelle l'outil doit également avoir admin. droits de cours.

Exemple d'utilisation:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
0
MrCalvin

Appuyez sur la touche Windows + X et vous pouvez maintenant sélectionner Powershell ou Invite de commandes avec des droits d'administrateur. Fonctionne si vous êtes l'administrateur. La fonction peut être inutilisable si le système ne vous appartient pas.

0
Tom