Gibt es einen "sudo" -Befehl für Windows?

448

Ich arbeite auf meinem Windows-Computer immer mit einem Konto, das kein Administrator ist. Manchmal muss ich Programme installieren, für die Administratorzugriff erforderlich ist. Gibt es einen Windows-Befehl zum Eskalieren von Berechtigungen, der dem Linux-Terminalbefehl ähnelt, da ich meistens die Windows-Eingabeaufforderung verwende sudo?

ukanth
quelle
7
Ich glaube, der Begriff, den Sie suchen, ist "erhöhter" Zugang. Obwohl Ihre Anmeldeinformationen über Administratorrechte verfügen, haben Prozesse unter Ihren Anmeldeinformationen keine Administratorrechte, bis Sie den Befehl "sudo" ausführen. In Windows nennen sie es "Elevate".
Surfasb
7
@IGRACH nicht auf meiner Powershell ...
Jiggunjer
2
Ich benutze diesedoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William
1
Probieren Sie mein wsudo, ein sudoähnliches Tool für Windows, das als Chocolatey-Paket erhältlich ist.
Noseratio

Antworten:

266

Der Befehl runas .

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

Renn einfach:

runas /noprofile /user:Administrator cmd 

um eine Befehlsshell als Administrator zu starten

Davy Landman
quelle
22
Möglicherweise möchten Sie, dass das Profil für eine erweiterte Verwendung geladen wird (z. B. einschließlich Umgebungsvariablen). In diesem Fall lassen Sie die /noprofile.
Richard
6
Das funktioniert bei mir nicht. Nachdem ich mein Passwort eingegeben habe, wird die Eingabeaufforderung geschlossen.
Jonas
55
fragt dieser nicht nach dem Passwort des Administrators? sudo fragt nach deinem Passwort!
n611x007,
15
Dies ist leider stark veraltet. RunasFührt lediglich Befehle mit anderen Anmeldeinformationen aus. Obwohl Ihre Anmeldeinformationen über Administratorberechtigungen verfügen, werden nicht alle Prozesse unter Ihren Anmeldeinformationen als Administrator ausgeführt.
Surfasb
12
+1 für "veraltet", da Runas die Benutzerkontensteuerung nicht umgehen können. Drücken Sie stattdessen die Windows-Taste, geben Sie cmd ein und drücken Sie Strg + Umschalt + Eingabetaste.
Mild-Gelb
125

Ich entdeckte , heben heute die „einen Befehl mit UAC Erhöhung von Berechtigungen führt. Diese für die Arbeit innerhalb Eingabeaufforderungen oder mit Batch - Dateien nützlich ist.“ Es ist nicht dasselbe wie sudo, es ändert den ausführenden Benutzer in Administrator, aber seine Syntax ist viel einfacher zu verwenden als runasund es kann das aktuelle Verzeichnis beibehalten, wodurch die Verwendung relativer Pfade ermöglicht wird.

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".

Der Zweck von Elevate besteht nicht darin, die Benutzerkontensteuerung (User Account Control, UAC) zu umgehen oder zu umgehen, sondern damit zu arbeiten. Solange die Benutzerkontensteuerung aktiviert ist , muss zu einem bestimmten Zeitpunkt eine Eingabeaufforderung vorliegen. Wenn Sie alle Eingabeaufforderungen entfernen müssen, müssen Sie die Benutzerkontensteuerung deaktivieren .

Die Schmerzpunkterhöhung lindert das Eskalieren eines bestimmten Prozesses von einer nicht privilegierten Shell und macht dann wie gewohnt weiter. Ohne dies müssen Sie eine privilegierte Eingabeaufforderung mit einem Rechtsklick> "Als Administrator ausführen" starten , die nicht einfach per Skript ausgeführt werden kann, bevor Sie den privilegierten Befehl ausführen.

Matt Wilkie
quelle
5
Das geht perfekt mit "Elevate without prompting" in secpol.msc. Zusammen machen sie dasselbe wie %wheel ALL=(ALL) NOPASSWD: ALLin sudo.
sayap
2
@sayap, um ganz klar zu sein, meinst du das hier: ss64.com/nt/syntax-uac.html ?
Matt Wilkie
5
Das einzige Problem, das ich mit elevate (v1.3.0) habe, ist, dass es den Fehlercode nicht von dem Programm zurückgibt, das es aufruft.
Ken
4
Sudo.bat: @elevate %*=> Gewinn!
Joe DF
10
Wäre schön zu erwähnen, dass es sich um ein externes Dienstprogramm handelt, bei dem OOTB fehlt.
Hi-Angel
67

Sie können den ähnlichen Befehl runas verwenden oder das Projekt sudo für Windows unter SourceForge auschecken, das einen Befehl sudo hinzufügt.

Der Unterschied ist subtil:

Angenommen, Sie haben zwei Benutzer. Bob ist ein normaler Benutzer und James ein Administrator.

Wenn Sie sich als Bob anmelden und den Befehl "runas james acommand" verwenden, wird der Befehl so ausgeführt, als ob er von James ausgeführt wurde. Dadurch wird auf die Benutzereinstellungen von James zugegriffen, und alle Benutzeränderungen werden in die Ordner " James My Documents & settings " usw. verschoben B. eine Anwendung installieren, wird sie als James und nicht als Bob installiert.

Wenn Bob andererseits "sudo" -Befehl ausführt, wird der Befehl immer noch als Bob ausgeführt, jedoch mit erhöhten Berechtigungen - genau wie der Linux-Befehl sudo. Um zu verhindern, dass ein Benutzer sudo ausführen kann, müssen Sie eine Benutzergruppe für sudoer definieren, die die Liste der normalen Benutzer enthält, die über die Berechtigung verfügen, sudo zu verwenden. Die Benutzer müssen vor der Erhöhung noch Anmeldeinformationen eingeben.

Manchmal ist der Unterschied nicht wichtig, manchmal ist er es, und ich finde, dass beide Befehle nützlich sein können.

Simon P Stevens
quelle
2
Bist du sicher? Wenn ich sudo in ubuntu starte und mein aktuelles Theme in ~/.themesist, kann die sudo-ed-Anwendung nicht auf dieses Theme zugreifen, da es nicht in ist /home/root/.themes, und verwendet das voreingestellte hässliche GTK-Theme.
Hasen
5
@hasen j - Ihr Problem liegt nur daran, dass ~ / .themes ausgewertet wird, bevor der Befehl ausgeführt wird (und somit bevor er auf root umschaltet).
Jared
1
Eine andere Lösung, mit Ausnahme der auf GitHub gehosteten, ist windosu: github.com/tehsenaus/windosu Ich habe sie gerade gefunden und sie scheint großartig zu funktionieren. Lieblingssache ist, dass es super einfach zu installieren ist. Einfach "npm install -g windosu".
Venryx
39

Sie können auch die PowerToys zur Skripterhöhung verwenden .

Quog
quelle
Genial - genau das, wonach ich gesucht habe. Ich wollte nicht ausführen, da ein Befehl einen anderen Benutzer hat, nur um ihn mit erhöhten Rechten auszuführen.
Orip
Genau die richtige Lösung für dieses Problem! Wer will Runas mit seiner chaotischen Syntax?
Stabledog
1
Ich habe mir oft gewünscht, dass der Befehl zum Erhöhen in Fenstern eingebaut wäre. Es ist ein fantastisches Werkzeug.
nhinkle
Es gibt jetzt eine Elevation PowerToys-Sammlung desselben Autors, aus der das Erstellen eines selbstaufrichtenden Skripts besonders relevant ist.
Matt Wilkie
1
@barlop natürlich nicht. Das würde den Zweck von UAC zunichte machen.
nhinkle
29

Wenn Sie bereit sind, zu alternativen Konsolen zu wechseln, gibt es ConEmu (ich bin der Autor). Eine seiner Funktionen - die Möglichkeit, sowohl erhöhte als auch nicht erhöhte Tabs in einem ConEmu-Fenster auszuführen. Registerkarten können auch mit anderen Anmeldeinformationen gestartet werden.

Für den Benutzerkomfort gibt es die Batch-Datei csudo.cmd (die leicht in bash übernommen werden kann). Lesen Sie die vollständige Beschreibung im Wiki des Projekts . Kurz gesagt, wenn Sie beispielsweise einen Befehl von einer vorhandenen nicht erhöhten Registerkarte ausführen

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

ConEmu wird dismin der neuen erhöhten Konsole / Registerkarte gestartet (mit vorheriger UAC-Eingabeaufforderung in Vista oder Login-Box in XP).

Standardmäßig csudostartet die neue Konsole in einem Split (Änderungen können durch Bearbeiten des csudo.cmdInhalts erfolgen).

Und natürlich können Sie es umbenennen, sudo.cmdwenn Sie "klassisches" sudoWort mögen .

sudo in ConEmu / Windows

Maximus
quelle
1
csudo wurde vor langer Zeit in die ConEmu-Distribution aufgenommen. Es wird überhaupt kein Link benötigt.
Maximus
Das Problem hierbei ist, dass die neue Konsolenregisterkarte nach dem Befehl sudo'd nicht mehr verwendet werden kann. Sie können also nicht in der erweiterten Registerkarte weiterarbeiten, sondern erhalten nur eine press enter or esc to exitNachricht.
Jiggunjer
1
Natürlich kannst du nicht. Sogar unter Unix kehren Sie zum nicht erhöhten Terminal zurück, nachdem der sudoBefehl ausgeführt wurde! Sie gehen in die falsche Richtung.
Maximus
1
1) Wenn Sie ein neues Fenster oder einen neuen Tab öffnen, können Sie es auch behalten, und der Benutzer kann wählen, ob er fortfahren möchte. 2) Auf meinem Ubuntu muss ich nicht jedes Mal sudo, die Erhöhung dauert ein paar Minuten, denke ich. 3) Diese Anwendung hat eine Million Optionen, aber nichts dafür? Vielleicht bin ich verwöhnt.
Jiggunjer
24

Schnelle Methode:

Drei Schritte zum Hinzufügen von sudo.

  1. Öffnen Sie PowerShell.

  2. Kopieren Sie das folgende Skript (Strg + C) und fügen Sie es in PowerShell ein (Alt + Leertaste + 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.

Der sudoBefehl in PowerShell wird dauerhaft aktiviert .

Verwendungszweck:

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

Beispiele:

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

Lange Methode zum Lernen:

Hinweis: Ich habe das Skript aus beiden Artikeln gemischt, um das oben genannte Skript zu erstellen. Anstatt das Skript manuell in den Editor einzufügen, habe ich die Out-Filezu speichernden Anweisungen ps1und $profileDateien aus dem Skript hinzugefügt .

Tipp: Wenn Sie kein großer Fan von UAC-Popups sind (wie ich), speichern Sie Folgendes in der * .reg-Datei und führen Sie sie aus:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
vulkanischer Rabe
quelle
1
Ich liebe die PowerShell-Lösung für diese Frage. Dies muss der einfachste Weg sein, etwas zu erhöhen. Bestehende .bat-Dateien können problemlos in POSH konvertiert werden
Mitchell Skurnik
. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
Habe
@sowrov, siehe [dieser Artikel] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Standardmäßig sind PowerShell-Skripts bei jeder Windows-Installation deaktiviert. Sie müssen es mit diesem Befehl aktivieren set-executionpolicy remotesigned. Andere Optionen remotesignedsind in offiziellen Dokumenten beschrieben .
Vulkanrabe
Leser beachten, dass dieses ps-Skript ein Wrapper für die powershell -c start -verb runas program.exeFunktionalität ist. Beachten Sie auch, dass Sie mit der Eingabeaufforderung cmd (nativ) nicht so hochfahren können. Powershell ist die beste native Option.
Jiggunjer
kann das gleiche in cmd.exe anstelle von Powershell env gemacht werden? Powershell berechnet nicht mit Klirren und ohne Klirren Fenster überhaupt nicht ...
PJJ
20

Wenn Sie dies unter Windows tun, gibt es neben dem Befehl Ausführen als, wie in einigen anderen Antworten erwähnt, auch Möglichkeiten, dies mit der Maus zu tun.

Wenn Sie die ShiftTaste gedrückt halten, während Sie mit der rechten Maustaste auf die meisten ausführbaren Dateien in Windows klicken, sollten Sie einige erweiterte Optionen bemerken. Eine davon ist die Run As...Option " " (ich glaube, sie heißt Run As Administratorab Vista " ").

Sie können auch eine erweiterte Version von RunAs von Microsoft, ShellRunAs , herunterladen . Dies hat Verbesserungen gegenüber dem integrierten RunAs-Befehl, sowohl im Befehlszeilen- als auch im Grafikmodus, einschließlich des Speicherns von Kontoanmeldeinformationen

GAThrawn
quelle
4

Es gibt eine Schokoladenpackung mit dem passenden Namen sudo . Sie können das Paket mit diesem Befehl mit chocolatey installieren:

choco install -y sudo

Dann können Sie in jeder Windows / MS-Shell, die Sie verwenden müssen, sudowie erwartet verwenden.

ypid
quelle
3

Surun ist eine kostenlose Open-Source-Anwendung, mit der bestimmte Programme mit Administratorrechten ausgeführt werden können, ohne ein Kennwort anzugeben , ohne die Benutzerregistry zu ändern oder Umgebungsvariablen zu ändern.

Wenn ich Windows XP verwendet habe, hilft mir diese App sehr. Beta läuft unter Windows 7.

schleichend
quelle
surun macht einen tollen job. Unter Windows 8 und 8.1 sind die Standardeinstellungen jedoch manchmal nicht ideal. Sie können keine Eingabeaufforderung mit einem Rechtsklick auf den Startbildschirm starten, da dies die Funktion "Ausführen als" von Windows ersetzt.
Wolf
3

Wie Sie wahrscheinlich festgestellt haben, können Sie mit runas als ein anderer Benutzer ausgeführt werden, aber es kann keine Erhöhung durchführen und es werden keine aktuellen Verzeichnisse, Umgebungsvariablen oder langen Befehlszeilen übergeben.

Die Hamilton C-Shell löst das mit einem echten Su und Sudo. Mit su können Sie einen Befehl als ein anderer Benutzer ausführen. Mit sudo (eigentlich ein Alias ​​für su) können Sie einen Befehl mit erhöhten Rechten ausführen. Sie können auch beides ausführen, indem Sie als anderer Benutzer mit erhöhten Rechten ausgeführt werden. Aktuelle Verzeichnisse, Umgebungsvariablen und lange Befehlszeilen werden als Shared-Memory-Handshake zwischen su, das im Kontext des Aufrufers ausgeführt wird, und einer Kopie von su übergeben, die als Zwischenspiel mit den neuen Anmeldeinformationen ausgeführt wird, mit denen das untergeordnete Element gestartet wird. Vollständige Offenlegung: Ich bin der Autor.

Nicole Hamilton
quelle
1

Ein funktionierender sudoErsatz für Cygwins minttyTerminal wäre, das folgende Skript in den PATH des Benutzers einzufügen:

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

Für mich ist dies der einzig praktikable Ersatz, um die Rechte von Programmen wie vimoder cygrunsrvwährend der Arbeit in einem Terminal unter Windows zu erhöhen .

karafior
quelle
1

Dieses Skript erledigt die Arbeit:

@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

Speichern Sie es als sudo.cmddann fügen Sie es Ihrem PFAD hinzu

Hinweis: Das runasbedeutet in diesem Zusammenhang "Als Administrator ausführen" und nicht "Als anderer Benutzer ausführen".

Von hier genommen und leicht bearbeitet, um den cscript.exe-Header aus der Ausgabe zu entfernen

Charles Milette
quelle
1
Dadurch wird eine neue Konsole erstellt. Das neue Fenster verschwindet, nachdem der Befehl sudo'd ausgeführt wurde. Sie können also nicht einmal die Ausgabe lesen.
Jiggunjer
Leider schon. Es kann jedoch für einige grundlegende Befehle (Kopieren), GUI-Tools oder das Öffnen einer Admin-Cmd verwendet werden.
Charles Milette
1

Die meiner Ansicht nach einfachste Lösung ist die Nutzung von Powershell für die Ausführung der Arbeit, die portabel ist und den Benutzer zur Verwendung der Benutzerkontensteuerung auffordert.

Sie können dies einfach in einer beliebigen Shell ausführen (cmd oder powershell)

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

Das folgende VBS-Skript erledigt den Trick für mich. Ich ziehe es anC:\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