So führen Sie den Befehl 'sudo' in Windows aus

91

Wie würde ich den folgenden Befehl in Windows ausführen:

$ sudo django-admin.py startproject NEW

?

David542
quelle
Es ist besser, die Verwendung von Terminalbefehlen in Windows zu vermeiden. Versuchen Sie stattdessen, dasselbe mit Hilfe einer IDE wie Eclipse + PyDev zu tun. Es wird die Dinge viel einfacher machen.
Pushpak Dagade
7
@Pushpak Dagade: Ihr Kommentar hat mich im Allgemeinen abgeschreckt, aber als ich dies tippte, wurde mir klar, dass dies STACK OVERFLOW ist. Dies sind die Personen, die das Terminal in Windows verwenden. =) Ich meine, PowerShell würde sonst wahrscheinlich nicht existieren.
Brent Rittenhouse
2
Was wäre, wenn er ein Skript zur Automatisierung einer Aufgabe erstellen würde? (Ja, mir ist klar, dass Sie DAS als privilegierter Benutzer ausführen können.)
Brent Rittenhouse
Probieren Sie mein wsudo aus , ein sudo-ähnliches Tool für Windows, das als Chocolatey-Paket erhältlich ist.
Noseratio

Antworten:

97

sudoIn Windows gibt es keinen Befehl. Das nächste Äquivalent ist "Als Administrator ausführen".

Sie können dies mit dem runasBefehl mit einer Administrator-Vertrauensstufe tun oder indem Sie mit der rechten Maustaste auf das Programm in der Benutzeroberfläche klicken und "Als Administrator ausführen" auswählen .

BlueRaja - Danny Pflughoeft
quelle
4
Wissen Sie, ob das Verhalten von Runas von Version zu Version unterschiedlich ist? Ich habe Win7 Enterprise installiert und alle Kombinationen, die ich mit Runas versucht habe, erstellen das neue Cmd ohne Administratorrechte
notNullGothik
4
Mit Sudo für Windows (sudowin) können autorisierte Benutzer Prozesse mit erhöhten Berechtigungen unter Verwendung ihrer eigenen Passphrase starten. Im Gegensatz zum Befehl runas behält Sudo für Windows das Benutzerprofil und den Besitz der erstellten Objekte bei. Sie können es hier bekommen: sourceforge.net/projects/sudowin
Joe Bigler
Auschecken gsudo( stackoverflow.com/a/58753166/97471 ). Es ist ein Sudo für Windows mit *nix sudoBenutzererfahrung: Ermöglichen der Ausführung des Befehls in der aktuellen Konsole und im Cache für Anmeldeinformationen (nur ein UAC-Popup).
Gerardo Grignoli
Runas ist die Erhöhung eines Benutzerkontos in Administratoren. Sudo ist eine andere Sache. Dies sollte nicht die akzeptierte Antwort sein.
Massimo
14

Öffnen Sie den Editor und fügen Sie diesen Code ein:

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

Speichern Sie dann die Datei als sudo.cmd. Kopieren Sie diese Datei und fügen Sie sie unter C:\Windows\System32oder fügen Sie den Pfad sudo.cmdzu Ihrer PATH-Umgebungsvariablen hinzu.

Wenn Sie die Eingabeaufforderung öffnen, können Sie jetzt so etwas wie ausführen sudo start ..

Wenn das Eingabeaufforderungsfenster des Administrators beim Ausführen des Befehls geöffnet bleiben soll, ändern Sie den Code im Editor wie folgt:

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

Erläuterung:

powershell -Command führt einen Powershell-Befehl aus.

Start-Process ist ein Powershell-Befehl, der einen Prozess startet, in diesem Fall die Eingabeaufforderung.

-Verb RunAs führt den Befehl als admin aus.

-Argument-List führt den Befehl mit Argumenten aus.

Unsere Argumente sind '/c cd /d %CD% && %*'. %*bedeutet alle Argumente. Wenn Sie dies tun sudo foo bar, wird es in der Eingabeaufforderung ausgeführt, foo barda die Parameter foo und bar sind, und wird %*zurückgegeben foo bar.cd /d %CD%ist ein Befehl, um zum aktuellen Verzeichnis zu wechseln. Dadurch wird sichergestellt, dass beim Öffnen des erhöhten Fensters das Verzeichnis mit dem normalen Fenster identisch ist. Dies &&bedeutet, dass Sie den zweiten Befehl ausführen, wenn der erste Befehl erfolgreich ist.

Das /c ist ein cmd Parameter zum Schließen des Fensters nach dem Befehl beendet ist , und die/k ist ein cmd Parameter für das Halten Sie das Fenster geöffnet.

Dank an Adam Plocher für den Verbleib im aktuellen Verzeichniscode.

CME1 Crewmitglied
quelle
Ein Problem dabei ist, dass Sie sich nach dem Erhöhen nicht mehr im aktuellen Ordner befinden, sondern im C:\Windows\System32.
Noseratio
2
@noseratio wahr, es scheint, dass eine Änderung dies jedoch den Trick tun wird:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher
@AdamPlocher, das könnte funktionieren, könnte aber Probleme haben, wenn die Befehlszeile %*Anführungszeichen enthält. Deshalb habe ich wsudoPowerShell-basiert erstellt.
Noseratio
Dies ist die Erhöhung eines Benutzerkontos in Administratoren. Sudo ist eine andere Sache.
Massimo
Können Sie nicht einfach die echoZeilen eins und drei überspringen, indem Sie @der Powershell-Zeile voranstellen?
Nudl
9

Alle Antworten erklären, wie Sie Ihren Befehl in einem neuen erhöhen können Konsolenhost .

Was mich amüsierte, war, dass sich keines dieser Tools so verhält *nix sudo, dass der Befehl in der aktuellen Konsole ausgeführt werden kann.

Also schrieb ich: gsudo

Quellcode https://github.com/gerardog/gsudo

Installation

Über Schaufel

  • Installieren Sie scoop, falls Sie es noch nicht haben. Dann:
scoop install gsudo

Oder über Chocolatey

choco install gsudo

Manuelle Installation:

Demo

gsudo Demo

Gerardo Grignoli
quelle
8

Ich habe wsudoein Open-Source- sudoähnliches CLI-Tool für Windows erstellt, mit dem Programme oder Befehle mit erhöhtem Recht im Kontext des aktuellen Verzeichnisses ausgeführt werden können . Es ist als Schokoladenpaket erhältlich .

Ich benutze es viel für Sachen wie die Konfiguration Build - Agenten, admin Dinge wie sfc /scannow, dism /online /cleanup-image /restorehealthoder einfach für die Installation / Aktualisierung meiner lokalen Chocolatey Pakete. Benutzung auf eigene Gefahr.

Installation

choco install wsudo

Chocolatey muss bereits installiert sein.

Zweck

wsudoist ein Linux- sudoähnliches Tool für Windows, mit dem ein Programm mit erhöhten Rechten (als Administrator) über eine Nicht-Administrator-Shell-Eingabeaufforderung aufgerufen und das aktuelle Verzeichnis beibehalten werden kann.

Diese Implementierung hängt nicht vom alten Windows Script Host ( CScript) ab. Stattdessen wird ein Hilfsskript für PowerShell 5.1 verwendet, das aufgerufen wird"Start-Process -Wait -Verb runAs ..." Hilfsskript für Cmdlet . Auf Ihrem System ist PowerShell 5.x höchstwahrscheinlich bereits installiert, andernfalls wird Ihnen angeboten, es als Abhängigkeit zu installieren.

Verwendung

wsudoführt ein Programm oder einen Inline-Befehl mit erhöhten Rechten im aktuellen Verzeichnis aus. Beispiele:

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

Weitere Informationen finden Sie im GitHub-Repro .

noseratio
quelle
2
Vielen Dank für die Veröffentlichung von "wsudo", es ist sehr nützlich für mich. Ich denke, der Vorteil Ihres wsudo besteht darin, dass das Arbeitsverzeichnis nicht den Alternativen entspricht. Ich konnte nicht finden, dass man CWD außer wsudo behalten kann. Ich denke, Sie sollten diesen Punkt in der Beschreibung hervorheben. Ich schätze deine Arbeit sehr.
Benok
3
Noch eine Sache, die Sie wissen lassen sollten. Kennen Sie den Adressleisten-Hack , um die Shell direkt zu öffnen? Normalerweise benutze ich diesen Hack, aber ich war sehr frustriert, als ich mit diesem Hack eine erhöhte Shell bekommen wollte. Ich habe versucht, viele Alternativen zu finden, aber es funktioniert nicht. Ich kann endlich eine mit "wasudo [shell]" öffnen. Ich liebe es, das zu haben.
Nochmals vielen
3
@benok, das tue ich, es ist in der Tat ein praktischer Hack! Ich bin froh wasudo, dass ich es dir leichter gemacht habe. Ich selbst lebe hauptsächlich im integrierten VSCode-Konsolenterminal, also tippe ich einfach wasudodort :) Die nächste Verbesserung wäre, die Umgebungsvariablen zu erben .
Noseratio
Hallo @benok, vielleicht interessiert Sie auch mein neues Dienstprogramm zur Verbesserung der Produktivität beim Kopieren / Einfügen / Ausführen, DevComrade :)
noseratio
5

runasBefehl erfordert, dass die Benutzer Passwort eingeben. Wenn Sie kein Kennwort eingeben und nur auf das Dialogfeld "Benutzerkontensteuerung" klicken möchten, verwenden Sie Start-Process -Verb runasin PowerShell anstelle des runasBefehls.

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

SATO Yusuke
quelle
Dies ist die Erhöhung eines Benutzerkontos in Administratoren. Sudo ist eine andere Sache.
Massimo
4

Normalerweise würden Sie dies nicht tun, da Sie es unabhängig davon nicht unter * nix ausführen würden. Führen Sie die Entwicklung in einem Benutzerverzeichnis durch und stellen Sie sie anschließend in Systemverzeichnissen bereit.

Ignacio Vazquez-Abrams
quelle
2

Das folgende vbs-Skript ermöglicht das Starten eines bestimmten Befehls mit Argumenten mit Elevation und ahmt das Verhalten des ursprünglichen Unix-Sudo-Befehls für eine begrenzte Anzahl verwendeter Fälle nach (es werden weder Anmeldeinformationen zwischengespeichert noch Befehle mit unterschiedlichen Anmeldeinformationen wirklich ausgeführt). Ich ziehe es an 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

Beispiel für die Verwendung an einer Eingabeaufforderung sudo net start service

ceztko
quelle
1
Wie können wir das Skript auf Benutzereingaben warten lassen, damit wir die Ausgabe des Shell-Programms lesen können?
Ahmad Hajjar
1
Du meinst interaktiven Shell-Befehl? Nun, Sie sollten zuerst versuchen, sicherzustellen, dass der gestartete Befehl auf die Rückkehr gewartet wird. Hier scheint es möglich zu sein. Dann sollten Sie die Ausgabe von den Shell-Objekten erhalten und ausgeben, was meiner Meinung nach auch möglich ist. Erwarten Sie jedoch nicht, dass alles möglich ist, was Sie unter Unix tun können.
Ceztko
Unter Windows 10 wird in Zeile 1 Zeichen 6 ein Syntaxfehler ausgegeben.
Martin Braun
Dies ist die Erhöhung eines Benutzerkontos in Administratoren. Sudo ist eine andere Sache.
Massimo
1

Ich glaube, ich habe nach einigen Recherchen die folgenden Schritte ausprobiert und war erfolgreich

1.Installieren Sie scoop mit Powershell 3 (iex (neues Objekt net.webclient) .downloadstring (' https://get.scoop.sh ')). 2. Installieren Sie scoop --global sudo. 3. Stellen Sie sicher, dass die Pfade (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) in Umgebungspfadvariable hinzugefügt.

Pawan Gangwani
quelle
1

Bei Windows gibt es keinen sudo-Befehl und es ist auch nicht erforderlich, $ einzugeben. Für die Installation von Angular CLI über die Eingabeaufforderung node.js in Windows habe ich einfach npm install -g @ angle / cli geschrieben und dann die Eingabetaste gedrückt. Es hat gut funktioniert.

Saurabh Kumar
quelle
0

Öffnen Sie die Konsole als Administrator. Klicken Sie mit der rechten Maustaste auf die Eingabeaufforderung oder Bash -> more und wählen Sie "Als Administrator ausführen".

James N.
quelle
0

In Windows Powershell können Sie den Befehl Start-Process mit der Option -Verb RunAszum Starten und Erhöhen des Prozesses verwenden. Hier ist mein Beispiel für eine Sudo-Funktion:

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

Beispiel: Öffnen Sie die Hosts-Datei als Admin im Editor

sudo notepad C:\Windows\System32\drivers\etc\hosts
David Hatch
quelle
0

Verwendung der sudo Befehl für Fensterbenutzer verwenden, erhalten Sie die folgenden Vorschläge:

Installieren Sie zunächst das scoopPaketverwaltungstool und führen Sie die folgenden Befehle aus:

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie dann scoop, um den sudoBefehl zu installieren :

Geben Sie hier die Bildbeschreibung ein

Schließlich können Sie den Befehl ausführen mit sudo:

Geben Sie hier die Bildbeschreibung ein

Azjhong
quelle
0

Ich bin froh dir zu helfen.

Gehen Sie folgendermaßen vor, um einen Sudo-Befehl auszuführen: -

  1. Erstellen Sie einen Ordner env in C: \ Drive.
  2. Erstellen Sie einen Ordner im env-Ordner mit dem Namen bin.
  3. Fügen Sie nun C: \ env \ bin zu Ihrem PFAD hinzu.
  4. Erstellen Sie eine Datei sudo.bat in C: \ env \ bin.
  5. Bearbeiten Sie es mit dem Editor und schreiben Sie diesen Code: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Hoffe das wird dir helfen

Aayush Shah
quelle
Diese Antwort sollte den Text der Batch-Datei enthalten und nicht von einem Link außerhalb der Site aufgrund von Link Rot abhängen. Die Antwort sollte auch den Haftungsausschluss enthalten, dass dieses Skript versucht, das grobe Verhalten von sudo zu emulieren, aber nicht wirklich sudo ist (es ist ein Pseudo-sudo).
Asky
0

Um einen Befehl nur als Administrator in einer nicht erhöhten Powershell auszuführen, können Sie ihn Start-Processdirekt verwenden, insbesondere mit den richtigen Optionen -Verb runas.

Es ist viel komplizierter als sudo, insbesondere weil Sie den vorherigen Befehl nicht einfach mit einer zusätzlichen Option wiederverwenden können. Sie müssen die Argumente für Ihren Befehl separat angeben.

Hier ist ein Beispiel für die Verwendung des Befehls route zum Ändern des Gateways:

Dies schlägt fehl, weil wir uns nicht in einem erhöhten PS befinden:

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

Dies funktioniert nach dem Akzeptieren der Benutzerkontensteuerung:

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

Oder für einen Befehl, der Folgendes erfordert cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
mivk
quelle