Comment 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 le cmd qui a été ouvert ne semble pas être élevé! Des solutions?
Comment 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 le cmd qui a été ouvert ne semble pas être élevé! Des solutions?
Réponses:
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 était de faire ce qui suit:
powershell -Command "Start-Process cmd -Verb RunAs"
et appuyez surEnterSelon la documentation , le modèle de sécurité Windows ...
n'accorde pas de privilèges administratifs en tout temps. Même les administrateurs fonctionnent avec des privilèges standard lorsqu'ils exécutent des tâches non administratives qui ne nécessitent pas de privilèges élevés.
Vous disposez de l' option Créer cette tâche avec des privilèges administratifs dans la boîte de dialogue Créer une nouvelle tâche ( Gestionnaire des 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 des outils tiers (reposant 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
nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1
enfin travaillé. Les autres runas /user:...
moyens demandaient un mot de passe alors qu'ils étaient déjà un administrateur (mode batch tué).
nircmdc elevate cmd
nircmd
, de le faire fonctionner comme Linux sudo
, créez un sudo.bat
fichier sur votre chemin avec ce contenu: nircmd elevate %*
. Ensuite, vous pouvez faire, par exemple,sudo net stop W3SVC
windosu
:)
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 sortir 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"
sudo.bat
(vous pouvez le 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
vers un dossier dans votre PATH
; si vous ne savez pas ce que cela signifie, déplacez simplement ces fichiers versc:\windows\
sudo
fonctionnera maintenant 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 le remplacer sudo
par le nom de votre choix) avec le contenu suivant
nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
et sudo.bat
vers un dossier dans votre PATH
; si vous ne savez pas ce que cela signifie, déplacez simplement ces fichiers versc:\windows\
sudo
fonctionnera maintenant dans la boîte de dialogue Exécuter ( win+r) ou dans la barre d'adresse de l'explorateur (c'est la meilleure partie :))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, dl un programme tiers, voici un autre moyen, pur Windows.
Réponse courte : vous pouvez, tout en étant élevé, 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 longueur moyenne : tout en étant élevé, 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
Puis 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 article de blog "Démarrer le programme SANS UAC, utile au démarrage du système et dans les fichiers batch (utiliser le planificateur de tâches)"
Ce qui suit en tant que fichier de commandes ouvrira une invite de commandes avec élévation de privilèges avec le chemin d'accès au 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 "
Ma façon préférée de faire cela est d'utiliser PsExec.exe de SysInternals, disponible à 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 s'exécute avec le jeton élevé du compte, si disponible.
Faites en sorte que le fichier de commandes enregistre les informations d'identification du compte administrateur réel à l'aide du /savecred
commutateur. Cela demandera les informations d'identification 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 s'exécutera en tant qu'administrateur complet mais ne demandera pas d'informations d'identification car elles sont stockées crypté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 demanderont le mot de passe que la première fois:
START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
Bien que les deux solutions fournies par Dheeraj Bhaskar fonctionnent, malheureusement, elles entraîneront l' affichage de la boîte de dialogue UAC en haut (ordre z) mais ne se concentrant pas (la fenêtre focalisée est la fenêtre cmd / powershell de l'appelant), donc je dois soit saisissez 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 = "[...] do not dim [...]" .)
La solution suivante est un peu délicate car elle utilise deux fichiers, mais elle préserve le bon ordre de mise au point, donc aucune action supplémentaire de la souris / du clavier n'est requise (en plus de confirmer la boîte de dialogue UAC: Alt + Y ).
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
Courez avec su
.
J'utilise Elevate
depuis un moment maintenant.
C'est la 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
de .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
désactiver le IIS
service.
L'exécution de la commande me donne la UAC
boîte de dialogue, correctement focalisée avec le contrôle du clavier et en acceptant la boîte de dialogue, je retourne dans mon shell.
..
@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 "god.cmd" dans votre system32 ou quel que soit votre chemin vers ...
si vous ouvrez une cmd dans e: \ mypictures \ et tapez god, il vous demandera des informations d'identification et vous remettra au même endroit que l'administrateur ...
Semblable à certaines des autres solutions ci-dessus, j'ai créé un elevate
fichier de commandes qui exécute une fenêtre PowerShell surélevée, en contournant la stratégie d'exécution pour permettre l'exécution de tout, des commandes simples aux fichiers de commandes en passant par les scripts PowerShell complexes. Je recommande de le coller dans votre dossier C: \ Windows \ System32 pour une utilisation facile.
La elevate
commande d' 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 respectivement mettent 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 élevé d'origine:
@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
)
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 modifier le chemin, vous devrez 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 (13KB) fera le travail ... mais il pourrait. Ou du moins être utile pour les autres avec des besoins similaires qui sont venus sur cette page comme moi (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 administrateur). Mais vous obtiendrez une boîte de dialogue UAC pour confirmer! (peut-être pas si l'UAC a été désactivé, ne l'avez pas testé).
Et le compte appelant l'outil doit également avoir admin. droits bien sûr.
Exemple d'utilisation:
ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
La méthode de Dheeraj Bhaskar avec Powershell contient un espace manquant, du moins pour l'incarnation Windows 10 de Powershell.
La ligne de commande à l'intérieur de son sudo.bat doit être
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"
Notez l'espace supplémentaire après% cd%
;) Frode
Voici une manière d'intégrer l'explorateur. Il fera apparaître un élément de menu supplémentaire lorsque vous cliquez avec le bouton droit dans n'importe quel dossier de l'Explorateur Windows:
Voici les étapes:
* Utilisez pushd au lieu de cd pour lui permettre de fonctionner sur n'importe quel lecteur. :-)
Vous pouvez utiliser la syntaxe suivante, j'avais la même question et je ne pensais pas qu'un script devrait être nécessaire.
runas / profil / utilisateur: domaine \ nom d'utilisateur cmd
Cela a fonctionné pour moi, cela peut être différent sur votre réseau.
Je l'ai fait facilement en utilisant cette commande suivante dans cmd
runas / netonly / utilisateur: Administrateur \ Administrateur cmd
après avoir tapé cette commande, vous devez entrer votre mot de passe administrateur (si vous ne connaissez pas votre mot de passe administrateur, laissez-le vide et appuyez sur Entrée ou tapez quelque chose, a fonctionné pour moi).
Il existe plusieurs façons d'ouvrir une cmd élevée, mais seule votre méthode fonctionne à partir de l'invite de commande standard. Il vous suffit de mettre user
non username
:
runas /user:machinename\adminuser cmd
Consultez l'aide pertinente de la communauté Microsoft .
J'ai utilisé runas /user:domainuser@domain cmd
ce qui a ouvert une invite élevée avec succès.