Come eseguire il comando "sudo" in Windows


92

Come dovrei eseguire il seguente comando in Windows:

$ sudo django-admin.py startproject NEW

?


È meglio evitare di utilizzare i comandi del terminale in Windows. Invece, prova a fare lo stesso con l'aiuto di un IDE, come Eclipse + PyDev. Renderà le cose molto più semplici.
Pushpak Dagade

7
@Pushpak Dagade: Sono rimasto sconcertato dal tuo commento, in generale, ma quando sono andato a digitare questo ho capito che è STACK OVERFLOW. Queste sono le persone che usano il terminale in Windows. =) Voglio dire, PowerShell probabilmente non esisterebbe altrimenti.
Brent Rittenhouse

2
Inoltre, cosa succederebbe se stesse creando uno script per automatizzare un'attività? (Sì, mi rendo conto che potresti gestirlo come utente privilegiato.)
Brent Rittenhouse,

Prova il mio wsudo , uno strumento simile a sudo per Windows disponibile come pacchetto Chocolatey.
noseratio

Risposte:


97

Non è presente alcun sudocomando in Windows. L'equivalente più vicino è "esegui come amministratore".

Puoi farlo utilizzando il runascomando con un livello di attendibilità amministratore o facendo clic con il pulsante destro del mouse sul programma nell'interfaccia utente e scegliendo "Esegui come amministratore".


4
Sai se il comportamento di runas varia da versione a versione? Ho installato Win7 enterprise e tutte le combinazioni che ho provato con runas creano il nuovo cmd senza privilegi di amministratore
notNullGothik

4
Sudo per Windows (sudowin) consente agli utenti autorizzati di avviare processi con privilegi elevati utilizzando la propria passphrase. A differenza del comando runas, Sudo per Windows conserva il profilo dell'utente e la proprietà degli oggetti creati. Puoi scaricarlo
Joe Bigler

Controlla gsudo( stackoverflow.com/a/58753166/97471 ). È un sudo per Windows con *nix sudoesperienza utente: consente di eseguire il comando all'interno della console corrente e cache delle credenziali (solo un popup UAC).
Gerardo Grignoli

runas è l'elevazione di un account utente in Administrators; sudo è un'altra cosa. Questa non dovrebbe essere la risposta accettata.
Massimo

14

Apri il blocco note e incolla questo codice:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c cd /d %CD% && %*'"
@echo on

Quindi, salva il file come sudo.cmd. Copia questo file e incollalo C:\Windows\System32o aggiungi il percorso in cui si sudo.cmdtrova alla variabile d'ambiente PATH.

Quando apri il prompt dei comandi, ora puoi eseguire qualcosa di simile sudo start ..

Se desideri che la finestra del prompt dei comandi dell'amministratore rimanga aperta quando esegui il comando, modifica il codice nel blocco note in questo:

@echo off
powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
@echo on

Spiegazione:

powershell -Command esegue un comando PowerShell.

Start-Process è un comando PowerShell che avvia un processo, in questo caso il prompt dei comandi.

-Verb RunAs esegue il comando come amministratore.

-Argument-List esegue il comando con argomenti.

I nostri argomenti sono '/c cd /d %CD% && %*'. %*significa tutti gli argomenti, quindi se lo facessi sudo foo bar, verrebbe eseguito nel prompt dei comandi foo barperché i parametri sono foo e bar e %*restituisce foo bar. cd /d %CD%è un comando per andare alla directory corrente. Ciò assicurerà che quando apri la finestra elevata, la directory sarà la stessa della finestra normale. il &&che significa che se il primo comando ha esito positivo, eseguire il secondo comando.

La /cè un parametro cmd per chiudere la finestra dopo il comando è terminato, e la /kè un parametro cmd per mantenere la finestra aperta.

Ringraziamo Adam Plocher per la permanenza nel codice della directory corrente.


Un problema è che una volta elevato, non sei più in quella che era la cartella corrente, ma piuttosto in C:\Windows\System32.
noseratio

2
@noseratio true, sembra che cambiarlo in questo farà il trucco, tuttavia:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher

@AdamPlocher, potrebbe funzionare ma potrebbe avere problemi se la riga di comando %*contiene virgolette. Ecco perché ho creato wsudo, basato su PowerShell.
noseratio

Questa è l'elevazione di un account utente in Amministratori; sudo è un'altra cosa.
Massimo

Non puoi semplicemente saltare le echorighe uno e tre anteponendo @la riga PowerShell?
nudl

9

Tutte le risposte spiegano come elevare il tuo comando in un nuovo host della console.

Quello che mi ha divertito è stato il fatto che nessuno di questi strumenti si comporta come se fosse *nix sudopossibile eseguire il comando all'interno della console corrente .

Quindi ho scritto: gsudo

Codice sorgente https://github.com/gerardog/gsudo

Installazione

Via scoop

  • Installa lo scoop se non lo hai già. Poi:
scoop install gsudo

O tramite Chocolatey

choco install gsudo

Installazione manuale:

Demo

gsudo demo


8

Ho creato wsudoun open-sourcesudo strumento CLI di tipo per Windows per eseguire programmi o comandi con elevato diritto, nel contesto della directory corrente . È disponibile come confezione Chocolatey .

Io lo uso molto per cose come la configurazione di agenti di build, cose di amministrazione come sfc /scannow, dism /online /cleanup-image /restorehealtho semplicemente per l'installazione / aggiornamento dei miei pacchetti cioccolatoso locali. Utilizzare a proprio rischio.

Installazione

choco install wsudo

Chocolatey deve essere già installato.

Scopo

wsudo è un Linux sudo strumento simile a per Windows per invocare un programma con diritti elevati (come amministratore) da un prompt dei comandi della shell non amministratore e mantenere la sua directory corrente.

Questa implementazione non dipende dal precedente Windows Script Host (CScript ). Invece, usa uno script di PowerShell 5.1 di supporto che richiama il "Start-Process -Wait -Verb runAs ..."cmdlet. Molto probabilmente sul tuo sistema è già installato PowerShell 5.x, altrimenti ti verrà offerto di installarlo come dipendenza.

Utilizzo

wsudoesegue un programma o un comando inline con diritti elevati nella directory corrente. Esempi:

wsudo .\myAdminScript.bat 
wsudox "del C:\Windows\Temp\*.* && pause"
wasudo cup all -y
wasudox start notepad C:\Windows\System32\drivers\etc\hosts 

Per maggiori dettagli, visita la riproduzione di GitHub .


2
Grazie per aver pubblicato "wsudo", è abbastanza utile per me. Penso che il vantaggio del tuo wsudo sia mantenere la directory di lavoro diversa dalle alternative. Non sono riuscito a trovare uno in grado di mantenere CWD diverso da wsudo. Penso che dovresti sottolineare questo punto nella descrizione. apprezzo molto il tuo lavoro.
benok

3
Un'altra cosa per farti sapere. Conosci l' hack della barra degli indirizzi per aprire direttamente la shell? Di solito uso questo hack, ma ero molto frustrato quando volevo ottenere una shell elevata con questo hack. Ho provato a trovare molte alternative ma non funziona. Finalmente posso aprirne uno con "wasudo [shell]". Mi piace avere questo. Grazie ancora :-)
benok

3
@benok, lo so, è davvero un trucco utile! Sono contento wasudoche ti sia stato più facile. Io stesso vivo per lo più nel terminale della console integrata VSCode, quindi digito wasudolì :) Il prossimo miglioramento sarebbe ereditare le variabili di ambiente .
noseratio

Ciao @benok, potresti anche essere interessato alla mia nuova utility per migliorare la produttività di copia / incolla / esegui, DevComrade :)
noseratio

5

runasIl comando richiede agli utenti di digitare la password. Se non vuoi digitare la password e vuoi semplicemente fare clic sulla finestra di dialogo UAC, usa Start-Process -Verb runasin PowerShell invece dirunas comando.

vedere: http://satob.hatenablog.com/entry/2017/06/17/013217


Questa è l'elevazione di un account utente in Amministratori; sudo è un'altra cosa.
Massimo

4

Normalmente non lo faresti, dal momento che non lo eseguiresti sotto * nix a prescindere. Eseguire lo sviluppo in una directory utente e distribuirlo successivamente nelle directory di sistema.





2

Il seguente script vbs consente di avviare un determinato comando con argomenti con elevazione e imita il comportamento del comando sudo originale unix per un insieme limitato di casi utilizzati (non memorizzerà le credenziali né consentirà di eseguire veramente comandi con credenziali diverse). L'ho indossato 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

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


1
come possiamo fare in modo che lo script attenda l'input dell'utente, in modo da poter leggere l'output del programma shell?
Ahmad Hajjar il

1
Intendi il comando di shell interattivo? Bene, dovresti prima provare ad assicurarti che il comando lanciato sia atteso per il ritorno. Qui sembra possibile. Quindi dovresti ottenere l'output dagli oggetti della shell e visualizzarlo, cosa che immagino sia anche possibile. Non aspettarti che tutto ciò che puoi fare in unix sarà possibile, però.
ceztko

Su Windows 10 genera un errore di sintassi sulla riga 1 char 6.
Martin Braun

Questa è l'elevazione di un account utente in Amministratori; sudo è un'altra cosa.
Massimo

1

Penso di aver provato i passaggi seguenti dopo aver fatto alcune ricerche e ci sono riuscito

1.Installa scoop usando powershell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. esegui scoop install --global sudo 3. assicurati che i percorsi (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) aggiunti nella variabile del percorso ambientale.


1

Non esiste un comando sudo in caso di Windows e inoltre non è necessario inserire $. Per installare Angular CLI tramite il prompt dei comandi node.js in Windows, ho appena scritto npm install -g @ angular / cli e poi ho premuto Invio. Ha funzionato bene.


0

apri la console come amministratore. Fare clic con il pulsante destro del mouse sul prompt dei comandi o bash -> altro e selezionare "Esegui come amministratore"


0

In Windows Powershell è possibile utilizzare il comando Start-Process con l'opzione -Verb RunAsper avviare e il processo elevato. Ecco il mio esempio di funzione sudo:

function sudo {
    Start-Process @args -verb runas
}

Es: Apri il file hosts come amministratore nel blocco note

sudo notepad C:\Windows\System32\drivers\etc\hosts

0

L'utilizzo del sudocomando per gli utenti di finestre fornisce i seguenti suggerimenti:

Innanzitutto, installa lo scoopstrumento di gestione dei pacchetti ed esegui i seguenti comandi:

inserisci qui la descrizione dell'immagine

Quindi utilizzare scoopper installare il sudocomando:

inserisci qui la descrizione dell'immagine

Infine, puoi eseguire il comando con sudo:

inserisci qui la descrizione dell'immagine


0

Sono felice di aiutarti.

Per eseguire un comando sudo segui i passaggi: -

  1. Crea una cartella env in C: \ Drive.
  2. Crea una cartella all'interno della cartella env denominata bin.
  3. Ora aggiungi C: \ env \ bin al tuo PERCORSO.
  4. Crea un file sudo.bat in C: \ env \ bin.
  5. Modificalo con il blocco note e scrivi questo codice: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Spero che questo ti possa aiutare


Questa risposta dovrebbe includere il testo del file batch, non dipendere da un collegamento fuori dal sito a causa della decomposizione del collegamento. Anche la risposta dovrebbe includere la dichiarazione di non responsabilità che questo script cerca di emulare il comportamento grossolano di sudo, ma non è realmente sudo (è uno pseudo-sudo).
asky

0

Per eseguire semplicemente un comando come amministratore in un Powershell non elevato, puoi utilizzare Start-Processdirettamente, con le opzioni giuste, in particolare -Verb runas.

È molto più complicato di sudo, soprattutto perché non puoi semplicemente riutilizzare il comando precedente con un'opzione aggiuntiva. È necessario specificare separatamente gli argomenti del comando.

Ecco un esempio, utilizzando il comando route per modificare il gateway:

Questo fallisce perché non siamo in un PS elevato:

> route change 0.0.0.0 mask 0.0.0.0 192.168.1.3
The requested operation requires elevation.

Funziona dopo aver accettato l'UAC:

> Start-Process route -ArgumentList "change 0.0.0.0 mask 0.0.0.0 192.168.1.3" -Verb runas

O per un comando che richiede cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
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.