Esiste un comando 'sudo' per Windows?


448

Lavoro sempre su un account non amministratore sul mio computer Windows. A volte ho bisogno di installare programmi che richiedono l'accesso come amministratore. Poiché utilizzo principalmente il prompt dei comandi di Windows, esiste un comando di Windows per l'escalation dei privilegi, simile al comando del terminale Linux sudo?


7
Credo che il termine che stai cercando sia un accesso "elevato". Anche se le tue credenziali dispongono dell'autorizzazione di amministratore, i processi nelle tue credenziali non dispongono delle autorizzazioni di amministratore fino a quando non esegui il "sudo" del comando. In Windows, lo chiamano "elevare".
surfasb,

7
@IGRACH non sul mio PowerShell ...
Jiggunjer,

2
Lo usodoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William,

1
Provate il mio wsudo, uno sudostrumento -come per Windows disponibile come pacchetto Chocolatey.
noseratio,

Risposte:


266

Il comando runas .

runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program

Corri:

runas /noprofile /user:Administrator cmd 

per avviare una shell dei comandi come amministratore


22
È possibile che si desideri caricare il profilo (ad esempio includendo le variabili di ambiente) per qualsiasi uso prolungato. Nel qual caso rilascia il /noprofile.
Richard,

6
Questo non funziona per me. Dopo aver digitato la password, il prompt dei comandi viene chiuso.
Jonas,

55
questo non richiede la password dell'amministratore? sudo sta chiedendo la tua password!
n611x007,

15
Sfortunatamente, questo è seriamente obsoleto. Runasesegue semplicemente i comandi con un diverso set di credenziali. Anche se le tue credenziali dispongono delle autorizzazioni di amministratore, ciò non significa che tutti i processi nelle tue credenziali vengano eseguiti come amministratore.
surfasb,

12
+1 per "obsoleto" poiché le rune non possono bypassare UAC. Invece, premi il pulsante Windows, digita cmd e premi Ctrl + Maiusc + Invio.
giallo intenso

125

Ho scoperto elevare oggi che "esegue un comando con UAC di privilegi più elevati. Questo è utile per lavorare all'interno prompt dei comandi o con i file batch." Non è lo stesso sudo, cambia l'utente in esecuzione in Amministratore, ma la sua sintassi è molto più semplice da usare rispetto a runas, e può mantenere la directory corrente, consentendo l'uso di percorsi relativi.

Synopsis:
  elevate [(-c | -k) [-n] [-u]] [-w] command

Options:
  -c  Launches a terminating command processor; equivalent to "cmd /c command".
  -k  Launches a persistent command processor; equivalent to "cmd /k command".
  -n  When using -c or -k, do not pushd the current directory before execution.
  -u  When using -c or -k, use Unicode; equivalent to "cmd /u".
  -w  Waits for termination; equivalent to "start /wait command".

Lo scopo di Elevate non è aggirare o bypassare UAC (User Account Control), ma lavorare con esso. Finché UAC è abilitato, ci deve essere una sorta di prompt ad un certo punto del processo. Se è necessario eliminare del tutto il prompt, è necessario disabilitare UAC .

Il punto di dolore elevato che allevia è l'escalation di un particolare processo da un guscio non privilegiato, e poi continua normalmente. Senza questo è necessario avviare un prompt dei comandi privilegiato con il tasto destro del mouse> "Esegui come amministratore" , che non può essere facilmente copiato, prima di tentare il comando privilegiato.


5
Questo è perfetto con "Elevate senza richiesta" in secpol.msc. Insieme, fanno lo stesso %wheel ALL=(ALL) NOPASSWD: ALLdi sudo.
diciamo il

2
@sayap, per essere chiari, intendi questo: ss64.com/nt/syntax-uac.html ?
Matt Wilson

5
L'unico problema che riscontro con elevate (v1.3.0) è che non restituisce il codice di errore dal programma che sta elevando.
Ken

4
Sudo.bat: @elevate %*=> profitto!
Joe DF,

10
Sarebbe bello ricordare che si tratta di un'utilità esterna, mancante OOTB.
Hi-Angel,

67

Puoi usare il comando runas che è un po 'simile, oppure puoi controllare il progetto sudo per Windows su SourceForge che aggiunge un comando sudo.

La differenza è sottile:

Supponiamo che tu abbia due utenti. Bob è un utente normale e James è un amministratore.

Se accedi come Bob e usi "runas james acommand" il comando viene eseguito come se fosse stato eseguito da James, quindi accede alle impostazioni dell'utente di James e tutte le modifiche dell'utente vanno nelle cartelle di My Documents & Documents , ecc. Quindi stanno installando un'applicazione, diciamo, verrà installata come James, non come Bob.

Se d'altra parte Bob fa "sudo acommand" il comando viene comunque eseguito come Bob, ma con permessi elevati - proprio come il comando sudo Linux. Per impedire a qualsiasi utente di essere in grado di eseguire sudo, è necessario definire un gruppo di utenti sudoers che contenga l'elenco degli utenti normali che dispongono dell'autorizzazione per elevare utilizzando sudo. Gli utenti devono comunque fornire le credenziali prima dell'elevazione.

A volte la differenza non è importante, a volte lo è, e trovo che entrambi i comandi possano essere utili.


2
Sei sicuro? Quando eseguo sudo in Ubuntu, se il mio tema attuale è presente, ~/.themesl'applicazione sudo-ed non sarà in grado di accedere a quel tema, perché non è in /home/root/.themes, e utilizzerà il tema brutto predefinito di gtk.
hasen

5
@hasen j - il tuo problema è solo perché ~ / .themes valuta prima dell'esecuzione del comando (e quindi prima che passi al root).
Jared,

1
Un'altra soluzione, tranne quella ospitata su GitHub, è windosu: github.com/tehsenaus/windosu l' ho appena trovata e sembra funzionare alla grande. La cosa preferita è che è super facile da installare. Basta "npm install -g windosu".
Venryx,

39

È inoltre possibile utilizzare i PowerToy di elevazione degli script .


Fantastico - esattamente quello che stavo cercando. Non volevo eseguire come comando ha un utente diverso, solo per eseguirlo con privilegi elevati.
orip

Esattamente la soluzione giusta per questo problema! Chi vuole Runas con la sua sintassi disordinata?
Stabledog

1
Ho spesso desiderato che il comando elevate fosse incorporato in Windows. È uno strumento fantastico.
nhinkle

ora esiste una raccolta Elevation PowerToys dello stesso autore per la quale la creazione di uno script auto-elevante è particolarmente rilevante.
Matt Wilson

1
@barlop ovviamente no. Ciò vanificherebbe lo scopo dell'UAC.
nhinkle

29

Se sei pronto per passare a console alternative, c'è ConEmu (sono l'autore). Una delle sue caratteristiche: la possibilità di eseguire schede sia elevate che non elevate in un'unica finestra di ConEmu. Le schede possono essere avviate anche con credenziali diverse.

Per comodità dell'utente, esiste un file batch csudo.cmd (che può essere facilmente adottato per bash). Leggi la descrizione completa nella wiki del progetto . In breve, ad esempio quando si esegue un comando da una scheda non elevata esistente

csudo dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess

ConEmu verrà avviato dismnella nuova console / scheda elevata (con il precedente prompt UAC in Vista o nella casella Login in XP).

Per impostazione predefinita, csudoavvia una nuova console in una divisione (potrebbero essere apportate modifiche tramite la modifica dei csudo.cmdcontenuti).

E ovviamente puoi rinominarlo sudo.cmdse ti piace la sudoparola "classica" .

sudo in ConEmu / Windows


1
csudo molto tempo fa era incluso nella distribuzione ConEmu. Non è necessario alcun collegamento.
Massimo

il problema qui è che la nuova scheda della console diventa inutilizzabile dopo il comando sudo'd. Quindi non puoi continuare a lavorare nella scheda elevata, ricevi solo un press enter or esc to exitmessaggio.
jiggunjer,

1
Certo che non puoi. Anche su Unix si ritorna al terminale non elevato dopo che il sudocomando è stato eseguito! Stai andando nel modo sbagliato.
Massimo

1
1) se aprirai una nuova finestra o scheda potresti anche tenerla, lascia che l' utente scelga se desidera continuare. 2) Sul mio Ubuntu non devo fare sudo ogni volta, penso che l'elevazione duri qualche minuto. 3) questa applicazione ha un milione di opzioni, eppure nulla per questo? Forse sono viziato.
Jiggunjer,

24

Metodo rapido:

Tre passaggi per aggiungere sudo.

  1. Apri PowerShell.

  2. Copia il seguente script (Ctrl + C) e incollalo in PowerShell (Alt + Spazio + E + P):

$script_path="$HOME\Documents\Scripts"; if (!(test-path $script_path)) {New-Item -ItemType directory $script_path} if (!(test-path $profile)) { new-item -path $profile -itemtype file -force }". $script_path\sudo.ps1" | Out-File $profile -append; "function sudo(){if (`$args.Length -eq 1){start-process `$args[0] -verb `"runAs`"} if (`$args.Length -gt 1){start-process `$args[0] -ArgumentList `$args[1..`$args.Length] -verb `"runAs`"}}" | Out-File $script_path\sudo.ps1; powershell
  1. Hit Enter.

Abiliterà permanentemente il sudocomando in PowerShell.

Uso:

sudo <process-name> [param1 [param2 [param3]]]

Esempi:

sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Metodo lungo per l'apprendimento:

Nota: ho combinato lo script di entrambi gli articoli per creare lo script di cui sopra. Piuttosto incollando manualmente lo script nel blocco note ho aggiunto le Out-Fileistruzioni da salvare ps1e i $profilefile dallo script.

Suggerimento: se non sei un grande fan dei popup UAC (come me), salva quanto segue nel file * .reg ed eseguilo:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1
Adoro la soluzione PowerShell per questa domanda. Questo deve essere il modo più semplice per elevare qualcosa. I file .bat esistenti possono essere facilmente convertiti in POSH
Mitchell Skurnik il

Ottenuto questo errore su Windows 10:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov il

@sowrov, vedi [questo articolo] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Per impostazione predefinita, gli script di PowerShell sono disabilitati su qualsiasi installazione di Windows. È necessario abilitarlo con questo comando set-executionpolicy remotesigned. Altre opzioni oltre remotesignedsono descritte nei documenti ufficiali .
corvo vulcaniano,

I lettori notano che questo script ps è un wrapper per la powershell -c start -verb runas program.exefunzionalità. Si noti inoltre che non è possibile elevarsi in questo modo con il prompt cmd (nativamente). Powershell è la migliore opzione nativa.
jiggunjer,

lo stesso può essere fatto in cmd.exe anziché in PowerShell ENV? PowerShell non calcola con il tintinnio e senza Windows tintinnio non calcola affatto ...
PJJ

20

Se lo stai facendo su Windows, oltre al comando Esegui come menzionato in un paio di altre risposte, ci sono anche modi per farlo con il mouse.

Se tieni premuto il Shifttasto mentre fai clic con il pulsante destro del mouse sulla maggior parte dei file eseguibili in Windows, dovresti notare alcune opzioni più avanzate. Uno di questi è l' Run As...opzione " " (penso che si chiami " Run As Administrator" da Vista in poi).

Puoi anche scaricare una versione più avanzata di RunAs da Microsoft, chiamata ShellRunAs , che presenta miglioramenti rispetto al comando RunAs integrato, sia in linea di comando che in modalità grafica, incluso il salvataggio delle credenziali dell'account


4

C'è un pacchetto cioccolatoso per esso con il comodo nome sudo . Puoi installare il pacchetto con chocolatey usando questo comando:

choco install -y sudo

Quindi in qualunque shell Windows / MS devi usare, puoi usare sudocome previsto.


3

Surun è un'applicazione open source gratuita che consente l'esecuzione di determinati programmi con diritti amministrativi, senza fornire una password senza cambiare il registro utenti o modificare le variabili di ambiente.

Quando stavo usando Windows XP questa app mi aiuta molto. Beta funziona con Windows 7.


surun fa un ottimo lavoro. Tuttavia a volte in Windows 8 e 8.1 i valori predefiniti non sono ideali. Poiché sostituisce l'esecuzione di Windows come funzione, non è possibile avviare un prompt dei comandi con il tasto destro del mouse sulla schermata iniziale.
Lupo,

3

Come probabilmente hai scoperto, runas ti consentirà di eseguire come un altro utente ma non può eseguire l'elevazione e non passa le directory correnti, le variabili di ambiente o le lunghe righe di comando.

La shell Hamilton C risolve questo problema con un su e un sudo originali. su ti consente di eseguire un comando come un altro utente; sudo (in realtà un alias su su) consente di eseguire un comando elevato. Puoi anche fare entrambe le cose, eseguendo elevato come un altro utente. Le directory, le variabili di ambiente e le lunghe righe di comando correnti vengono passate mediante una stretta di mano di memoria condivisa tra su in esecuzione nel contesto del chiamante e una sua copia in esecuzione come interludio con le nuove credenziali che avviano quindi il figlio. Divulgazione completa: sono l'autore.


1

Un sudosostituto funzionante per il minttyterminale di Cygwin sarebbe quello di inserire il seguente script nel PERCORSO dell'utente:

$!/bin/bash
cygstart --action=runas mintty -e `which bash` -lc \"$@\"

Per me questa è l'unica sostituzione praticabile per elevare i privilegi di programmi come vimo cygrunsrvmentre si lavora in un terminale su Windows.


1

Questo script fa il lavoro:

@echo Set objShell = CreateObject("Shell.Application") > %temp%\sudo.tmp.vbs
@echo args = Right("%*", (Len("%*") - Len("%1"))) >> %temp%\sudo.tmp.vbs
@echo objShell.ShellExecute "%1", args, "", "runas" >> %temp%\sudo.tmp.vbs
@cscript //NoLogo %temp%\sudo.tmp.vbs

Salvalo come sudo.cmdquindi aggiungilo al PERCORSO

Nota: i runasmezzi in questo contesto "Esegui come amministratore" e non "Esegui come altro utente"

Tratto da qui e leggermente modificato per rimuovere l'intestazione cscript.exe dall'output


1
Questo crea una nuova console. La nuova finestra scompare al termine del comando sudo'd, quindi non è nemmeno possibile leggere l'output.
jiggunjer,

Purtroppo sì. Ma può essere utilizzato per alcuni comandi di base (copia), strumenti della GUI o per aprire un cmd admin.
Charles Milette,

1

La soluzione più semplice a mio avviso è quella di sfruttare PowerShell per fare il lavoro, che è portatile e richiederà all'utente di utilizzare l'UAC.

Puoi semplicemente eseguirlo in qualsiasi shell (cmd o powershell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"

0

Il seguente script vbs fa il trucco per me. L'ho messoC:\Windows\System32

Set objArgs = WScript.Arguments
exe = objArgs(0)
args = ""
IF objArgs.Count >= 2 Then
   args = args & objArgs(1)
End If
For it = 2 to objArgs.Count - 1
   args = args & " " & objArgs(it)
Next
Set objShell = CreateObject( "WScript.Shell")
windir=objShell.ExpandEnvironmentStrings("%WINDIR%")
Set objShellApp = CreateObject("Shell.Application")
objShellApp.ShellExecute exe, args, "", "runas", 1
set objShellApp = nothing

Esempio di utilizzo su un prompt dei comandi sudo net start service

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.