Come eseguire il programma dalla riga di comando con diritti elevati


44

Esiste un modo per eseguire un programma o un comando con diritti elevati quando sono già in una riga di comando non elevata?

Esattamente la stessa azione che verrebbe eseguita quando faccio clic sul collegamento al programma e seleziono Esegui come amministratore .

Il comando runas probabilmente non è una soluzione: richiede una password, ma voglio solo la finestra di dialogo Controllo account utente .

Risposte:


14

Sembra che questa utility - Hidden Start - farà ciò che desideri se usi l'opzione / uac. Ecco un esempio di riga di comando:

hstart /UAC "notepad.exe"

Questo farà apparire la finestra di dialogo UAC anziché chiedere una password come fa runas.

inserisci qui la descrizione dell'immagine


2
Attenzione: quella piccola utility costa 20 $. Per quelli con tasca piccola, utilizzare RunAdmin invece :)
WeGoToMars

Questo non appare su Windows 10
sarà il

50

C'è un modo per farlo in PowerShell:

PS> Start-Process powershell -Verb runAs

19
Sembra funzionare bene. Dalla riga di comando, potresti fare ad esempiopowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze

7
Questo dovrebbe essere contrassegnato come l'IMO / risposta migliore - funziona senza utility di terze parti.
Crimbo,

5
Partendo da @marsze - Fwiw, gli argomenti nel caso più semplice vanno nel loro singolo valore tra virgolette, ad es powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Grazie!
ruffin,

Come posso reindirizzare l'output del prompt dei comandi con privilegi elevati nel mio script attualmente in esecuzione?
Wheeler,

@wheeler, sono quasi certo che non puoi farlo, ma puoi restituire un codice di uscita:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam

6

Sulla base della risposta di Rustam , puoi:

  • Crea un su.batfile batch da qualche parte nel tuo% PATH% predefinito, con il seguente one-liner:@powershell start -verb runas %*
  • Aggiungi questa funzione al tuo profilo $ PowerShell :function su {start -verb runas @args}

Ora puoi rilasciare su <command> [parameters]in entrambe le shell!


2

RunAdmin è una piccola utility (150Kb) che consente di eseguire un programma dalla riga di comando con diritti elevati (mostrerà l'UAC). E di fronte a Hidden Start è libero.


2

Questo funziona per me su tutte le piattaforme, incluso Windows 10. Le mie esigenze sono semplici, forse puoi adattare l'approccio se hai bisogno di energia .

Ho trovato un piccolo script chiamato, sudo.cmdchiamato per il comando sudo Linux. Funziona abbastanza bene, pensa. Ho delineato i requisiti, i passaggi da seguire e lo script è quasi in fondo con un esempio. Prima una parola di avvertimento.

ATTENZIONE : il comando viene eseguito nella directory di sistema di Windows per impostazione predefinita. Dovrai prima andarecdin un posto sicuro.

requisiti :

  • Esegui il comando con amministratore come privilegiato da Windows .CMD
    o dalla shell cmd.
  • richiedono i normali controlli dei privilegi di Windows sul comando
    • In altre parole, il comando NON funzionerà se non ho già effettuato l'accesso con un account privilegiato.
  • Esegui il comando con l'autorizzazione di amministratore e continua quando viene chiamato all'interno di uno script. Quindi attendere il completamento del comando.
  • Sii semplice, quindi funzionerà sempre
  • Non è necessario inserire una password ogni volta, se ho già effettuato l'accesso.
    • Un metodo migliore sarebbe se posso inserire la password una volta come fa il vero sudocomando su Linux.

soluzione :

  1. Creare uno script di comandi per eseguire tutti gli argomenti passati, sudo.cmd
  2. Creare una scorciatoia di Windows per il nome dello script di comando che: sudo.lnk.
  3. Inserisci la sudoscorciatoia nel PERCORSO di Windows in modo che possa essere visto.
  4. Modifica le proprietà della scorciatoia, rendi Start in:vuoto il percorso.
  5. Fare clic sul Advancedpulsante [ ] - VerificaRun as Administrator
  6. Abilita le scorciatoie nel tuo percorso di Windows, usa la variabile d'ambiente PATHEXT, vale a dire.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Quando si digita sudo dirsulla riga di comando, Windows mostrerà il

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Pop-up di controllo accessi. Se fai clic su "[ NO]" non accadrà nulla. Windows mostrerà un " Access is denied." messaggio.

Quando si fa clic su "[ YES]", il comando di directory viene eseguito con un privilegio elevato. Ovviamente probabilmente vuoi qualcosa di più interessante come l'arresto o la query su un servizio:

 sudo sc query SDRSVC

SDRSVC è il nome del servizio per "Servizio di backup di Windows", ciò mostra quanto segue in una finestra Cmd separata:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

La sudo.cmdsceneggiatura stessa è molto semplice. Come ho già detto, le mie esigenze sono semplici. Voglio solo interrompere e avviare i servizi mentre distribuisco il codice per i test.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

Il pausecomando attende che tu riveda i risultati. Se estrai pausela finestra di amministrazione si chiude e non sai se il comando ha funzionato o meno. Il ERRORLEVELdal comando viene restituito pure.


2

Funziona con Windows 10, non è stato testato con altre versioni di Windows.

Un esempio per aprire Blocco note con diritti di amministratore da cmd.exe che avvia PowerShell che richiede le autorizzazioni elevate.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Questo ti darà una finestra di dialogo UAC (se abilitato) con [Sì] [No], o ti chiederà la password dell'amministratore.

Un altro esempio per aprire il file hosts con il blocco note sarebbe:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Ulteriori informazioni: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6


Gli argomenti dell'eseguibile dovrebbero essere un -ArgumentListparametro, non semplicemente parametri aggiuntivi per avviare il processo.
Appleshell,

0

Dai un'occhiata a Start ++ : ha questa funzionalità insieme a molte altre cose utili. Per eseguire con il prompt UAC, utilizzare semplicemente sudoil nome del programma nella riga di comando, come mostrato qui:

testo alternativo

Ecco alcune altre funzionalità (puoi anche aggiungere le tue):

testo alternativo

testo alternativo


Sembra anche buono ma uso già FARR che ha funzionalità simili a Start ++ e altro (ovviamente tranne sudo).
Lukas Cenovsky,

2
Il link dice Benvenuti a: brandontools.com. Questa pagina Web è parcheggiata GRATIS. Vuoi acquistare brandontools.com?
xmojmr,

1
come dice @xmojmr, quel sito è morto. Se conosci una nuova posizione (non l'ho trovata così rapidamente), dovresti aggiornare il link nella risposta.
Abele,

-1

Puoi impostare __COMPAT_LAYER=RunAsAdmin. Quindi i comandi verranno eseguiti in un elevato separato cmd.

Esempio .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Tutte le opzioni della modalità di compatibilità sono elencate nel MS Application Compatibility Toolkit.


Questo file batch è orribilmente rotto. Non è possibile utilizzare ;come delimitatore di commenti. "I file batch non riconoscono il punto e virgola e generalmente causeranno un messaggio di errore relativo a un comando errato."
DavidPostill
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.