2009-09-17 09:24:35 +0000 2009-09-17 09:24:35 +0000
463
463
Advertisement

Esiste un comando 'sudo' per Windows?

Advertisement

Lavoro sempre su un account non amministratore sul mio computer Windows. A volte ho bisogno di installare programmi che richiedono l'accesso da parte dell'amministratore. Dato che per lo più uso il prompt dei comandi di Windows, c'è un comando Windows per aumentare i privilegi, simile al comando del terminale Linux sudo?

Advertisement

Risposte (15)

272
272
272
2009-09-17 09:29:46 +0000

Il comando runas .

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

Esegui semplicemente:

&001 &001

per avviare una shell di comando come amministratore

128
128
128
2011-04-12 06:42:00 +0000
  • Elevate ** - “esegue un comando con elevazione del privilegio UAC. Questo è utile per lavorare all'interno di prompt di comandi o con file batch”Non è lo stesso di sudo, cambia l'utente in esecuzione in Amministratore, ma la sua sintassi è molto più semplice da usare di 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".
``` &001 

Elevate non ha lo scopo di aggirare o bypassare UAC (User Account Control), ma di lavorare con esso. Finché UAC è abilitato, deve esserci una sorta di prompt in qualche punto del processo. Se si ha bisogno di eliminare del tutto il prompt si deve [ disattivare UAC ](http://ss64.com/nt/syntax-uac.html). 


Il punto di dolore Elevate alleviates sta escalando un particolare processo da un guscio non privilegiato per poi proseguire come al solito. Senza questo è necessario avviare un prompt di comando privilegiato con _right-click \> "Esegui come amministratore"_ prima di tentare il comando privilegiato, che non può essere facilmente scriptato. 

Questo funziona bene con _"Elevate senza prompt"_ in `secpol.msc`. Insieme, fanno lo stesso di `%wheel ALL=(ALL) NOPASSWD: ALL` in sudo 


Una limitazione nota è che non restituisce il codice di errore del programma che sta elevando. 


Se la memoria muscolare è bloccata su _sudo_, creare un alias usando [ Doskey ](https://ss64.com/nt/doskey.html): 
`doskey sudo=elevate -w` 



o batchfile in PATH: 
`@elevate -w %*` 


Elevate è uno strumento di terze parti scritto da [ Johannes Passing ](https://jpassing.com/). È un download da 11kb e portatile (non è necessaria l'installazione): [ http://code.kliu.org/misc/elevate/ ](http://code.kliu.org/misc/elevate/)
67
Advertisement
67
67
2009-09-17 09:28:30 +0000

Si può usare il comando runas che è un po’ simile, oppure si può controllare il progetto sudo per Windows su SourceForge che aggiunge un comando sudo.

La differenza è sottile:

Supponiamo di avere due utenti. Bob è un utente normale e James è un amministratore.

Se si accede come Bob e si usa “runas james acommand” il comando viene eseguito come se fosse eseguito da James, quindi accede alle impostazioni utente di James e qualsiasi modifica utente va nelle cartelle di James My Documents & settings, ecc. Quindi se si sta installando un'applicazione, diciamo, sarà installata come James, non come Bob.

Se d'altra parte Bob fa “sudo acommand” il comando è ancora eseguito come Bob, ma con permessi elevati - proprio come il comando sudo di Linux. Per impedire a qualsiasi utente di poter sudo è necessario definire un gruppo di utenti sudoers che contenga la lista degli utenti normali che hanno il permesso di elevare usando 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.

41
41
41
2009-09-17 13:11:39 +0000

È anche possibile utilizzare i Script Elevation PowerToys .

30
Advertisement
30
30
2012-10-26 07:52:13 +0000

Se siete pronti a passare a console alternative, c'è ConEmu (sono l'autore). Una delle sue caratteristiche - la possibilità di eseguire sia schede sopraelevate che non sopraelevate nella finestra di una ConEmu. Le schede possono essere avviate anche con credenziali diverse.

Per la comodità dell'utente, c'è il file batch-file csudo.cmd (che può essere facilmente adottato per bash). Leggere la descrizione completa nel wiki project’s wiki . In breve, quando si esegue un comando da una scheda non ellittica esistente, per esempio

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

ConEmu avvierà dism nella nuova console/tab elevata (con precedente prompt UAC in Vista o Login box in XP).

Per impostazione predefinita csudo avvia la nuova console in una suddivisione (possono essere modifiche tramite la modifica dei contenuti di csudo.cmd).

E naturalmente è possibile rinominarla in sudo.cmd se vi piace la parola “classico” sudo.

24
24
24
2012-08-28 10:36:22 +0000

Metodo rapido:

Tre passi per aggiungere sudo.

    1. Aprire PowerShell.
    1. Copiare il seguente script (Ctrl+C) e incollarlo in PowerShell (Alt+Space+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. Premere Invio.

Abiliterà permanentemente il comando sudo in PowerShell.

Uso:

sudo <process-name> [param1 [param2 [param3]]]
``` ```
sudo explorer
sudo notepad
sudo powershell
sudo cmd
sudo taskmgr
sudo tasklist
sudo taskkill /IM Skype.exe /PID 8496

Esempi:

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

Metodo lungo per l'apprendimento:

Nota: ho mescolato lo script di entrambi gli articoli per creare il suddetto script. Piuttosto, incollando manualmente lo script nel blocco note, ho aggiunto le istruzioni Out-File per salvare i file ps1 e $profile dallo script.

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

&001

19
Advertisement
19
19
2009-09-17 11:22:41 +0000

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

Se si tiene premuto il tasto Maiusc mentre si fa clic con il tasto destro del mouse sulla maggior parte dei file eseguibili in Windows si dovrebbero notare alcune opzioni più avanzate. Una di queste è l'opzione “Run As...” (penso che si chiami “Run As Administrator” da Vista in poi).

È anche possibile scaricare una versione più avanzata dei RunAs di Microsoft, chiamata ShellRunAs , questa ha dei miglioramenti rispetto al comando integrato dei RunAs, sia in linea di comando che in modalità grafica, tra cui la possibilità di salvare le credenziali dell'account

4
4
4
2011-11-17 15:24:50 +0000

Surun è un'applicazione gratuita e open-source che permette a certi programmi di funzionare con diritti amministrativi, senza fornire una password senza modificare il registro degli utenti o modificare le variabili d'ambiente.

Quando usavo Windows XP questa applicazione mi aiutava molto. Beta funziona sotto Windows 7.

3
Advertisement
3
3
2012-09-06 15:01:51 +0000

Come avrete probabilmente scoperto, runas vi permetterà di eseguire come un altro utente ma non può fare elevazione e non passa le directory correnti, le variabili d'ambiente o le lunghe linee di comando. Hamilton C shell [ Hamilton C shell ]&003 risolve questo problema con un vero su e sudo. su permette di eseguire un comando come un altro utente; sudo (in realtà un alias a su) permette di eseguire un comando elevato. Si possono anche fare entrambe le cose, eseguendo elevated come un altro utente. Le directory correnti, le variabili d'ambiente e le lunghe linee di comando sono passate attraverso una stretta di mano di memoria condivisa tra l'esecuzione di su nel contesto del chiamante e una copia di se stesso in esecuzione come intermezzo con le nuove credenziali che poi fa partire il bambino. Completa rivelazione: io sono l'autore.

3
3
3
2018-06-14 18:44:28 +0000

C'è un pacchetto di cioccolatini con il comodo nome sudo . Si può installare il pacchetto con chocolatey usando questo comando:

choco install -y sudo

Poi in qualsiasi shell Windows/MS si debba usare, si può usare sudo come previsto.

3
Advertisement
3
3
2019-11-07 16:12:24 +0000

Ho scritto gsudo , un sudo per windows che si sente come *nix sudo e ha alcune caratteristiche killer:

  • Esegui all'interno della console corrente (in allegato) senza rompere il tasto tab-key auto-complete. O aggiungere -n per lanciare in una nuova finestra.
  • Gestisce in modo affidabile tutti gli scenari da usare sugli script. (ExitCodes, StdIn/Out/Err Redirection/Capture)
  • Supporta Cmd/PowerShell/PowerShell Core
  • Credentials cache: Se gsudo viene richiamato più volte in pochi minuti mostra il pop-up UAC solo una volta.

&004

Usage

gsudo Apre una shell elevata nella console corrente.

gsudo [options] {command} [arguments] Esegue il comando specificato con i permessi elevati.

Più rilevante [options]:

  • -n | --new Avvia il comando in una nuova console con diritti elevati (e ritorna immediatamente).
  • -w | --wait Attende la fine del processo (e restituisce il codice di uscita).
  • -s | --system Esegue come account di sistema locale (“NT AUTHORITY\SYSTEM”).
  • --copyev Copia tutte le variabili di ambiente nella sessione elevata prima dell'esecuzione.

Installazione

  • Usando Scoop: scoop install gsudo
  • Usando Chocolatey: choco install gsudo
  • Installazione manuale
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
1
1
1
2014-11-26 09:45:34 +0000

Un sostituto funzionante del sudo del terminale mintty di Cygwin sarebbe quello di inserire il seguente script nel PATH dell'utente:

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


Per me questo è l'unico sostituto possibile per elevare i privilegi di programmi come `vim` o `cygrunsrv` mentre si lavora in un terminale su Windows.
1
Advertisement
1
1
2017-11-20 19:58:47 +0000

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

Si può semplicemente eseguire questo in qualsiasi shell (cmd o powershell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
0
0
0
2018-02-01 21:29:20 +0000

Il seguente script vbs permette di lanciare un dato comando con argomenti con elevazione e imita il comportamento del comando originale unix sudo per un insieme limitato di casi usati (non mette in cache le credenziali né permette di eseguire veramente comandi con credenziali diverse). Lo metto su C:\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
``` &001 


Esempio di utilizzo su un prompt di comandi `sudo net start service`
0
Advertisement
0
0
2016-01-10 21:08:24 +0000

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
``` &001 


Salva come `sudo.cmd` poi aggiungilo al tuo PATH 


Nota: il `runas` significa in questo contesto "Esegui come amministratore" e non "Esegui come altro utente" 
[ Preso da qui ](http://www.msfn.org/board/topic/142153-sudo-equivalent-for-windows-vista7/) e leggermente modificato per rimuovere l'intestazione cscript.exe dall'output
Advertisement
Advertisement