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?
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:
powershell -Command "Start-Process cmd -Verb RunAs"
et appuyez sur EnterSelon 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:
nircmdc elevate cmd
npm install -g windosu
(nécessite node.js installé)Sudo cmd
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"
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\
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 :))Sudo.bat
(vous pouvez remplacer Sudo
par le nom de votre choix) avec le contenu suivant nircmdc elevate cmd /k "cd /d %cd%"
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\
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 :))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"
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)" "
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 "
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.
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
..
@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 ...
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
)
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 ).
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
Exécuter avec su
.
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.
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
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"
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.