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 cmd
ma il cmd che è stato aperto non sembra essere elevato! Eventuali soluzioni?
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 cmd
ma il cmd che è stato aperto non sembra essere elevato! Eventuali soluzioni?
Risposte:
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:
powershell -Command "Start-Process cmd -Verb RunAs"
e premiEnterSecondo 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:
nircmdc elevate cmd
npm install -g windosu
(richiede node.js installato)sudo cmd
nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1
finalmente ha funzionato. Gli altri runas /user:...
modi richiedevano una password nonostante fosse già un amministratore (modalità batch interrotta).
nircmdc elevate cmd
nircmd
, per farlo funzionare come Linux sudo
, creare un sudo.bat
file nel percorso con questo contenuto: nircmd elevate %*
. Quindi puoi fare, ad esempio,sudo net stop W3SVC
windosu
:)
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"
sudo.bat
(puoi sostituire sudo
con qualsiasi nome tu voglia) con il seguente contenuto
powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
sudo.bat
in una cartella nel tuo PATH
; se non sai cosa significa, sposta questi file inc:\windows\
sudo
funzionerà nella finestra di dialogo Esegui ( win+r) o nella barra degli indirizzi di Explorer (questa è la parte migliore :))sudo.bat
(puoi sostituire sudo
con qualsiasi nome tu voglia) con il seguente contenuto
nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
e sudo.bat
in una cartella nel tuo PATH
; se non sai cosa significa, sposta questi file inc:\windows\
sudo
funzionerà nella finestra di dialogo Esegui ( win+r) o nella barra degli indirizzi di Explorer (questa è la parte migliore :))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)"
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.
Fare in modo che il file batch salvi le credenziali dell'account amministratore effettivo utilizzando lo /savecred
switch. 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
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 ).
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
Corri con su
.
Lo sto usando Elevate
da 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.exe
da .zip
in C:\Program Files\elevate
e aggiungo quel percorso al mio PATH
.
Quindi GitBash posso eseguire qualcosa come elevate sc stop W3SVC
disattivare il IIS
servizio.
L'esecuzione del comando mi dà la UAC
finestra di dialogo, correttamente focalizzata con il controllo della tastiera e dopo aver accettato la finestra di dialogo torno alla mia 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
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 ...
Simile ad alcune delle altre soluzioni sopra, ho creato un elevate
file 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 elevate
comando 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, elevatep
e 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
)
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
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"
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
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:
Ecco i passaggi:
* Usa pushd invece di cd per consentirgli di funzionare in qualsiasi unità. :-)
È 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.
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) ..
Esistono diversi modi per aprire un cmd elevato, ma solo il metodo funziona dal prompt dei comandi standard. Hai solo bisogno di mettere user
non username
:
runas /user:machinename\adminuser cmd
Consulta la guida pertinente della community Microsoft .
Ho usato runas /user:domainuser@domain cmd
con successo che ha aperto un prompt con privilegi elevati.