Come aprire un cmd elevato utilizzando la riga di comando per Windows?


109

Come si apre un prompt dei comandi con privilegi elevati utilizzando le righe di comando su un normale cmd?

Ad esempio io lo uso runas /username:admin cmdma il cmd che è stato aperto non sembra essere elevato! Eventuali soluzioni?


Ho provato tutte le risposte La risposta più utile senza software e meno di azioni è stackoverflow.com/a/40942828/9217577
TheGuardener

Risposte:


166

Mi sono imbattuto nello stesso problema e l'unico modo in cui sono riuscito ad aprire CMD come amministratore da CMD era fare quanto segue:

  1. Apri CMD
  2. Scrivi powershell -Command "Start-Process cmd -Verb RunAs"e premiEnter
  3. Apparirà una finestra pop-up che chiederà di aprire un CMD come amministratore

2
Buona risposta. Ho aggiunto e modificato che ho usato per farlo funzionare in una riga di comando!
Preet Sangha

1
Ho creato un file batch con questo e l'ho salvato come admincmd.bat nella mia cartella Windows, quindi tutto quello che devo fare è digitare "admincmd", premere invio e si apre un cmd admin. (Ho anche aggiunto un'altra riga al file batch con " exit "quindi chiude la finestra cmd non admin)
Tony Brix

Perché non posizionare il cmd (e tutti i parametri) alla fine. Avere il comando è strano dal punto di vista della leggibilità.
Eric Fossum

38

Secondo la documentazione , il modello di sicurezza di Windows ...

non concede sempre privilegi amministrativi. Anche gli amministratori vengono eseguiti con privilegi standard quando eseguono attività non amministrative che non richiedono privilegi elevati.

È disponibile l' opzione Crea questa attività con privilegi amministrativi nella finestra di dialogo Crea nuova attività ( Gestione attività> File> Esegui nuova attività ), ma non esiste un modo integrato per elevare efficacemente i privilegi utilizzando la riga di comando.

Tuttavia, esistono alcuni strumenti di terze parti (che si affidano internamente alle API di Windows) che puoi utilizzare per elevare i privilegi dalla riga di comando:

NirCmd :

  1. Scaricalo e decomprimilo.
  2. nircmdc elevate cmd

windosu :

  1. Installalo: npm install -g windosu(richiede node.js installato)
  2. sudo cmd

3
Grazie, nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1finalmente ha funzionato. Gli altri runas /user:...modi richiedevano una password nonostante fosse già un amministratore (modalità batch interrotta).
Marcos

Grazie pernircmdc elevate cmd
tim

4
Dopo intalling nircmd, per farlo funzionare come Linux sudo, creare un sudo.batfile nel percorso con questo contenuto: nircmd elevate %*. Quindi puoi fare, ad esempio,sudo net stop W3SVC
Kip

1
Penso che windosu sia di gran lunga il modo più semplice ed elegante per farlo, specialmente se sei uno sviluppatore ... grazie amico. Mi sento come se fossi sul sistema nix: D
Emmanuel Mahuni

amato windosu:)
Finlay Roelofs

32

Non ho abbastanza reputazione per aggiungere un commento alla risposta migliore, ma con il potere degli alias puoi cavartela semplicemente digitando quanto segue:

powershell "start cmd -v runAs"

Questa è solo una versione più breve della soluzione eccellente user3018703:

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

26

Modo semplice che ho fatto dopo aver provato altre risposte qui

Metodo 1: SENZA un programma di terze parti (l'ho usato)

  1. Crea un file chiamato sudo.bat(puoi sostituire sudocon qualsiasi nome tu voglia) con il seguente contenuto powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Spostati sudo.batin una cartella nel tuo PATH; se non sai cosa significa, sposta questi file inc:\windows\
  3. Ora sudofunzionerà nella finestra di dialogo Esegui ( win+r) o nella barra degli indirizzi di Explorer (questa è la parte migliore :))

Metodo 2: CON un programma di terze parti

  1. Scarica NirCmd e decomprimilo.
  2. Crea un file chiamato sudo.bat(puoi sostituire sudocon qualsiasi nome tu voglia) con il seguente contenuto nircmdc elevate cmd /k "cd /d %cd%"
  3. Sposta nircmdc.exee sudo.batin una cartella nel tuo PATH; se non sai cosa significa, sposta questi file inc:\windows\
  4. Ora sudofunzionerà nella finestra di dialogo Esegui ( win+r) o nella barra degli indirizzi di Explorer (questa è la parte migliore :))

Mentre sia il lavoro soluzioni, purtroppo comporterà l'UAC finestra di dialogo che mostra in cima (z-order-saggio), ma non è sempre concentrata . (Testato su Win10x64 v1607 build14393.447.)
Ogmios

@Ogmios è piuttosto strano. la finestra di dialogo funziona correttamente quando non viene avviata in questo modo? Sono stato molto felice di usarlo senza tali problemi. Forse è a causa di qualche altra configurazione che hai modificato?
Dheeraj Bhaskar

Sì, la finestra di dialogo UAC funziona come previsto in tutte le altre situazioni (che ho riscontrato). Questa è l'unica eccezione. E ovviamente ho cambiato il mio sistema in altri modi, ma non ho trovato nulla che possa avere un effetto nascosto su questa finestra di dialogo.
Ogmios

@Ogmios scusa, amico, non riesco a pensare a nient'altro che puoi fare per risolvere questo problema. Probabilmente dovresti provare le altre soluzioni per vedere se sono migliori per te. Saluti
Dheeraj Bhaskar

Sebbene PowerShell non sia una terza parte, non è un programma azionario e stai scrivendo un programma di terze parti per raggiungere l'obiettivo.
undrline

13

Uso sempre programmi nirsoft (es. Nircmdc) e sysinternals (es. Psexec). Sono molto utili.

Ma se non vuoi, o non puoi, dl un programma di terze parti, ecco un altro modo, puro Windows.

Risposta breve : puoi creare un'attività pianificata con privilegi elevati che puoi richiamare in seguito mentre non è elevato.

Risposta di media lunghezza : anche se elevato crea attività con (ma preferisco la GUI dell'utilità di pianificazione):

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

Quindi in seguito, senza elevazione necessaria, invoca con

schtasks /run /tn cmd_elev

Risposta lunga : ci sono molti dettagli irrequieti; vedere il mio post sul blog "Avvia il programma SENZA UAC, utile all'avvio del sistema e nei file batch (usa l'utilità di pianificazione)"


8

Quanto segue come file batch aprirà un prompt dei comandi con privilegi elevati con il percorso impostato sulla stessa directory di quella da cui è stato richiamato il file batch

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

5

Il mio modo preferito per farlo è usare PsExec.exe da SysInternals, disponibile su http://technet.microsoft.com/en-us/sysinternals/bb897553

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

L'interruttore "-h" è quello che fa la magia:

-h Se il sistema di destinazione è Vista o superiore, il processo viene eseguito con il token elevato dell'account, se disponibile.


1
Per farlo funzionare è necessario modificare le proprietà di psexec.exe e nella scheda compatibilità selezionare "Esegui come amministratore". Altrimenti riceverai un errore: PSEXESVC non installato. Ma psexec causa problemi con il tasto Tab in cmd.exe. Impossibile utilizzare la tabulazione per completare i nomi delle cartelle.
Peter Quiring,

Non sono sicuro su quale ambiente hai provato ma non ho avuto bisogno di cambiare l'impostazione "Esegui come amministratore" (stai cercando di eseguire cmd.exe su una macchina remota dal tuo?). Inoltre, nessun problema con il tasto Tab, posso completare con successo i nomi di file e cartelle (almeno testato su Win8.1 e Win10, in esecuzione da entrambe le righe di comando cmd e PowerShell)
David Rodriguez

Sto usando Win10 e lo sto eseguendo localmente. Non sono sicuro del motivo per cui succede a me e non a te. Ho fatto funzionare nircmd e non causa problemi con le schede.
Peter Quiring,

Noto anche che non è possibile completare automaticamente con il tasto Tab, ma almeno questo aprirebbe il prompt cmd elevato nel contesto di un altro utente, cosa che i metodi precedenti sopra non sembravano ottenere quando ho provato. Il flag '-h' è fantastico (Windows 10), funziona a meraviglia.
user1840734

4

Fare in modo che il file batch salvi le credenziali dell'account amministratore effettivo utilizzando lo /savecredswitch. Ciò richiederà le credenziali la prima volta e quindi memorizzerà la password crittografata nel gestore delle credenziali. Quindi per tutte le volte successive in cui il batch viene eseguito, verrà eseguito come amministratore completo ma non richiederà le credenziali perché sono archiviate crittografate nel gestore delle credenziali e l'utente finale non è in grado di ottenere la password. Quanto segue dovrebbe aprire un CMD con privilegi di amministratore completi e richiederà la password solo la prima volta:

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

3

Mentre entrambe le soluzioni fornite da lavoro Dheeraj Bhaskar, purtroppo comporterà l'UAC finestra di dialogo che mostra in cima (z-order-saggio), ma non è sempre concentrata (la finestra focalizzato è il chiamante cmd / PowerShell finestra), quindi ho neanche bisogno di afferrare il mouse e fare clic su "sì" o selezionare la finestra UAC utilizzando Alt + Maiusc + Tab. (Testato su Win10x64 v1607 build14393.447; UAC = "[...] non oscurare [...]" .)

La seguente soluzione è un po 'imbarazzante in quanto utilizza due file, ma preserva l'ordine corretto di messa a fuoco, quindi non sono necessarie azioni aggiuntive di mouse / tastiera (oltre a confermare la finestra di dialogo UAC: Alt + Y ).

  1. cmdadm.lnk (proprietà scorciatoia / Avanzate ... / Esegui come amministratore = ON) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Corri con su.


Purtroppo non posso riprodurlo. Ogni volta che uso una delle mie soluzioni. Il mio prompt UAC è concentrato e in primo piano
Dheeraj Bhaskar

3

Lo sto usando Elevateda un po 'di tempo.

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

Copio il bin.x86-64\elevate.exeda .zipin C:\Program Files\elevatee aggiungo quel percorso al mio PATH.

Quindi GitBash posso eseguire qualcosa come elevate sc stop W3SVCdisattivare il IISservizio.

L'esecuzione del comando mi dà la UACfinestra di dialogo, correttamente focalizzata con il controllo della tastiera e dopo aver accettato la finestra di dialogo torno alla mia shell.


3

..

@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

salva questo script come "god.cmd" nel tuo system32 o qualunque cosa il tuo percorso stia dirigendo ....

se apri un cmd in e: \ mypictures \ e digiti dio ti chiederà le credenziali e ti riporterà nello stesso posto dell'amministratore ...


1
powershell è interessante ma necessita di moduli ... im oldscool ... ho solo bisogno del sistema ...
jOte-

Questo metodo / trucco di elevazione funziona anche per percorsi / nomi di file lunghi? Oppure dovrei usare "% ~ snx0" o "% ~ dpsnx0"?
script'n'code

2

Simile ad alcune delle altre soluzioni sopra, ho creato un elevatefile batch che esegue una finestra di PowerShell con privilegi elevati, ignorando i criteri di esecuzione per consentire l'esecuzione di tutto, dai semplici comandi ai file batch agli script di PowerShell complessi. Consiglio di attaccarlo nella cartella C: \ Windows \ System32 per facilità d'uso.

Il elevatecomando originale esegue la sua attività, acquisisce l'output, chiude la finestra di PowerShell generata e quindi ritorna, scrivendo l'output catturato nella finestra originale.

Ho creato due varianti, elevatepe elevatex, che rispettivamente mettono in pausa e tengono aperta la finestra di PowerShell per ulteriore lavoro.

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

E nel caso in cui il mio link muoia mai, ecco il codice per il file batch elevato originale:

@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
)

0

Può usare una variabile di ambiente temporanea da usare con una scorciatoia con privilegi elevati (

start.cmd

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

ascladm.lnk (collegamento)

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

(per apportare modifiche al percorso dovrai creare temporaneamente il 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"

) (TargetingCmd viene eseguito in una finestra cmd elevata)

Sebbene si tratti di 3 file, puoi posizionare tutto (incluso TargetCmd) in qualche sottocartella (non dimenticare di aggiungere il folderName alle patch) e rinominare "start.cmd" con l'unico nome di destinazione

Per me sembra il modo più nativo per farlo, mentre cmd non ha il comando necessario


Ho letto tutte le soluzioni di cui sopra e le ho comprese. non capisco i tuoi passaggi. sto scegliendo la soluzione con i migliori pro e contro.
Dzmitry Lahoda

0

Non sono sicuro che lo strumento ExecElevated.exe (13KB) farà il lavoro ... ma potrebbe. O almeno essere utile per altri con esigenze simili che sono venuti su questa pagina come me (ma non ho trovato la soluzione quindi ho finito per creare lo strumento da solo in .Net).

Eseguirà un'applicazione con token elevato (in modalità amministratore). Ma otterrai una finestra di dialogo UAC per confermare! (forse no se l'UAC è stato disabilitato, non lo hai testato).

E anche l'account che chiama lo strumento deve avere admin. diritti ovviamente.

Esempio di utilizzo:

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

2
Adoro le risposte con "Potrebbe funzionare non ancora testato", e ovviamente quella con "Non sono sicuro" ....
Giridhar Karnik

1
il collegamento è interrotto.
Dzmitry Lahoda

Collegamento ristabilito, ci scusiamo per questo
MrCalvin

0

Il metodo di Dheeraj Bhaskar con Powershell ha uno spazio mancante, almeno per l'incarnazione di Windows 10 di Powershell.

La riga di comando all'interno del suo sudo.bat dovrebbe essere

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

Nota lo spazio extra dopo% cd%

;) Frode


0

Ecco un modo per integrarsi con Explorer. Apparirà una voce di menu extra quando fai clic con il pulsante destro del mouse in qualsiasi cartella in Esplora risorse:

Integrazione con Windows Explorer

Ecco i passaggi:

  1. Crea questa chiave: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Cambia il suo valore predefinito in quello che vuoi che appaia come testo della voce di menu. Ex "DOS Shell come amministratore"
  3. Crea un'altra chiave: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Cambia il suo valore predefinito in questo, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "'"
  5. E 'fatto. Ora fai clic con il pulsante destro del mouse in qualsiasi cartella e vedrai il tuo elemento all'interno degli altri elementi.

* Usa pushd invece di cd per consentirgli di funzionare in qualsiasi unità. :-)


-1

È possibile utilizzare la seguente sintassi, avevo la stessa domanda e non pensavo che fosse necessario uno script.

runas / profilo / utente: dominio \ nomeutente cmd

Questo ha funzionato per me, potrebbe essere diverso sulla tua rete.


-1

Usa semplicemente il comando: runas / noprofile / user: administrator cmd


-2

L'ho fatto facilmente usando questo comando seguente in cmd

runas / netonly / user: Administrator \ Administrator cmd

dopo aver digitato questo comando, devi inserire la tua password di amministratore (se non conosci la tua password di amministratore lasciala vuota e premi Invio o digita qualcosa, ha funzionato per me) ..


non mi ha aiutato
Dzmitry Lahoda

@ DzmitryLahoda puoi informarmi sull'errore che hai ricevuto?
Harish Regada

-2

Premi il tasto Windows + X e ora puoi selezionare Powershell o Prompt dei comandi con diritti di amministratore. Funziona se sei l'amministratore. La funzione può essere inutilizzabile se il sistema non è tuo.


-5

Esistono diversi modi per aprire un cmd elevato, ma solo il metodo funziona dal prompt dei comandi standard. Hai solo bisogno di mettere usernon username:

runas /user:machinename\adminuser cmd

Consulta la guida pertinente della community Microsoft .


4
Non è la stessa cosa che eseguire un comando con privilegi elevati, perché quando apro una finestra cmd elevata e digito "whoami" si ottiene lo stesso risultato di una finestra non elevata. Quando eseguo "whoami / all" in entrambi i casi posso vedere le differenze in termini di autorizzazioni per lo stesso utente.
Constantino Cronemberger

-5

Ho usato runas /user:domainuser@domain cmdcon successo che ha aperto un prompt con privilegi elevati.


Richiede le credenziali di un altro utente. Se sei già amministratore e desideri eseguire con privilegi elevati come quando fai clic con il pulsante destro del mouse su un'applicazione e scegli Esegui come amministratore e non è richiesta alcuna password, solo una finestra di dialogo di conferma, allora hai bisogno di qualcos'altro. Sono venuto qui cercando quella risposta ma non sembra essere qui.
Paul-Sebastian Manole
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.