Comment ouvrir un cmd élevé en utilisant la ligne de commande pour Windows?

Comment est-ce que j’ouvre une invite de commande élevée en utilisant des lignes de commande sur une cmd normale?

Par exemple, j’utilise runas /username:admin cmd mais le cmd qui a été ouvert ne semble pas être élevé! Des solutions?

J’ai rencontré le même problème et la seule façon d’ouvrir le CMD en tant qu’administrateur de CMD était la suivante:

  1. Ouvrir CMD
  2. Écrivez powershell -Command "Start-Process cmd -Verb RunAs" et appuyez sur Entrée
  3. Une fenêtre pop-up apparaîtra vous demandant d’ouvrir un CMD en tant qu’administrateur

Selon la 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 exécutent des tâches non administratives ne nécessitant pas de privilèges élevés.

Vous disposez de l’option Créer cette tâche avec des privilèges d’administrateur dans la boîte de dialog Créer une tâche ( Gestionnaire des tâches> Fichier> Exécuter une nouvelle tâche ), mais aucune méthode intégrée n’élève efficacement les privilèges à l’aide de la ligne de commande.

Cependant, il existe des outils tiers (basés 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

windosu :

  1. Installez-le: npm install -g windosu (requirejs node.js installé)
  2. sudo cmd

J’utilise les 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, dl un programme tiers, voici un autre moyen, Windows pur.

Réponse courte : en élévation, vous pouvez créer une tâche planifiée avec des privilèges élevés que vous pouvez ensuite appeler plus tard sans être élevé.

Réponse de taille moyenne : tant que la tâche de création est élevée (mais je préfère le GUI du planificateur de tâches):

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

Puis plus tard, aucune élévation nécessaire, invoquer 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 les fichiers de commandes (utiliser le planificateur de tâches)”

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

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

  1. Créez un fichier appelé sudo.bat (vous pouvez remplacer sudo par n’importe quel nom) avec le contenu suivant powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Déplacez sudo.bat vers un dossier dans 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 dialog 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 appelé sudo.bat (vous pouvez remplacer sudo par n’importe quel nom) avec le contenu suivant nircmdc elevate cmd /k "cd /d %cd%"
  3. Déplacez nircmdc.exe et sudo.bat vers 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 dialog Exécuter ( win + r ) ou dans la barre d’adresse de l’explorateur (c’est la meilleure partie :))

J’ai utilisé Elevate pendant un certain temps maintenant.

Description – This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files. 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 .

Puis 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 dialog UAC , correctement focalisée avec le contrôle du clavier et en acceptant la boîte de dialog, je reviens à mon shell.

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

 .\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 supérieur, le processus est-il exécuté avec le jeton élevé du compte, s’il est disponible.

Bien que les deux solutions fournies par Dheeraj Bhaskar fonctionnent, elles aboutiront malheureusement à ce que la boîte de dialog UAC apparaisse en haut (dans l’ordre z) mais ne soit pas focalisée (la fenêtre ciblée est la fenêtre cmd / powershell de l’appel). Prenez la souris et cliquez sur “Oui”, ou pour sélectionner la fenêtre UAC en utilisant Alt + Maj + Tab. (Testé sur Win10x64 v1607 build14393.447; UAC = “[…] ne pas réduire […]” )

La solution suivante est un peu délicate car elle utilise deux fichiers, mais elle préserve l’ordre de mise au point correct, de sorte qu’aucune action supplémentaire souris / clavier n’est requirejse (en plus de confirmer la boîte de dialog 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 .

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

La commande d’ elevate origine 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 mettent respectivement en pause et maintiennent 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 de commandes élévate 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 ) 

Les éléments suivants en tant que fichier de commandes ouvriront une invite de commandes avec le chemin d’access défini sur 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 " 

Faites en sorte que le fichier de commandes enregistre les informations d’identification du compte administrateur réel à l’aide du commutateur /savecred . Cela vous demandera des informations d’identification la première fois, puis stockera le mot de passe chiffré dans le gestionnaire d’informations d’identification. Par la suite, le traitement par lots s’exécute en tant qu’administrateur complet, mais pas en tant qu’invite car les informations d’identification sont stockées dans le gestionnaire d’informations d’identification et l’utilisateur final ne peut pas obtenir le mot de passe. Les éléments suivants devraient ouvrir un CMD élevé avec des privilèges d’administrateur complets et ne demander le mot de passe que la première fois:

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

Je ne suis pas sûr que l’outil ExecElevated.exe (13KB) fera le travail …. mais il se peut. Ou du moins être utile pour les personnes ayant des besoins similaires qui sont venus sur cette page comme je l’ai fait (mais je n’ai pas trouvé la solution, donc j’ai fini par créer l’outil moi-même dans .Net).

Il exécutera une application avec un jeton élevé (en mode admin). Mais vous aurez une boîte de dialog UAC pour confirmer! (peut-être pas si UAC a été désactivé, ne l’a pas testé).

Et le compte appelant l’outil doit également avoir admin. droits de la cause.

Exemple d’utilisation:

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

..

 @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 système32 ou quel que soit votre chemin vers …

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 …

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

start.cmd

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

ascladm.lnk (raccourci)

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

(pour faire des changements de chemin, vous devrez créer temporairement la 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’append le folderName aux patchs) et de renommer “start.cmd” en un seul nom ciblé.

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

Il existe plusieurs façons d’ouvrir un cmd élevé, mais seule votre méthode fonctionne à partir de l’invite de commande standard. Il vous suffit de mettre l’ user username :

 runas /user:machinename\adminuser cmd 

Voir l’aide pertinente de la communauté Microsoft .

J’ai utilisé runas /user:domainuser@domain cmd qui ouvrait avec succès une invite élevée.