Jak uruchomić polecenie „sudo” w systemie Windows


96

Jak uruchomiłbym następujące polecenie w systemie Windows:

$ sudo django-admin.py startproject NEW

?


Lepiej unikać używania poleceń terminala w systemie Windows. Zamiast tego spróbuj zrobić to samo za pomocą IDE, takiego jak Eclipse + PyDev. To znacznie uprości sprawę.
Pushpak Dagade

8
@Pushpak Dagade: Ogólnie rzecz biorąc, nie podobał mi się twój komentarz, ale kiedy poszedłem go napisać, zdałem sobie sprawę, że to jest STACK OVERFLOW. To są ludzie, którzy używają terminala w systemie Windows. =) Mam na myśli, PowerShell prawdopodobnie nie istniałby inaczej.
Brent Rittenhouse

2
A co by było, gdyby tworzył skrypt automatyzujący zadanie? (Tak, zdaję sobie sprawę, że możesz uruchomić TEGO jako uprzywilejowany użytkownik.)
Brent Rittenhouse,

Wypróbuj moje wsudo , narzędzie przypominające sudo dla systemu Windows dostępne w pakiecie Chocolatey.
noseratio

Odpowiedzi:


102

W sudosystemie Windows nie ma polecenia. Najbliższy odpowiednik to „Uruchom jako administrator”.

Możesz to zrobić za pomocą runaspolecenia z poziomem zaufania administratora lub klikając program prawym przyciskiem myszy w interfejsie użytkownika i wybierając opcję „Uruchom jako administrator”.


4
Czy wiesz, czy zachowanie runów różni się w zależności od wersji? Zainstalowałem Win7 enterprise i wszystkie kombinacje, które wypróbowałem z runas tworzą nowy cmd bez uprawnień administratora
notNullGothik

4
Sudo for Windows (sudowin) umożliwia autoryzowanym użytkownikom uruchamianie procesów z podwyższonymi uprawnieniami przy użyciu ich własnego hasła. W przeciwieństwie do polecenia runas, Sudo dla Windows zachowuje profil użytkownika i własność utworzonych obiektów. Możesz go pobrać tutaj: sourceforge.net/projects/sudowin
Joe Bigler

Sprawdź gsudo( stackoverflow.com/a/58753166/97471 ). Jest to sudo dla okien z *nix sudodoświadczeniem użytkownika: Zezwalanie na wykonanie polecenia w bieżącej konsoli i pamięć podręczna poświadczeń (tylko jedno wyskakujące okienko UAC).
Gerardo Grignoli

runas to podniesienie poziomu konta użytkownika w Administratorze; sudo to kolejna rzecz. To nie powinna być akceptowana odpowiedź.
Massimo

16

Otwórz notatnik i wklej ten kod:

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

Następnie zapisz plik jako sudo.cmd. Skopiuj ten plik i wklej go w miejscu C:\Windows\System32lub dodaj ścieżkę sudo.cmddo zmiennej środowiskowej PATH.

Po otwarciu wiersza polecenia możesz teraz uruchomić coś takiego sudo start ..

Jeśli chcesz, aby okno wiersza polecenia administratora pozostało otwarte po uruchomieniu polecenia, zmień kod w notatniku na ten:

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

Wyjaśnienie:

powershell -Command uruchamia polecenie PowerShell.

Start-Process to polecenie PowerShell, które uruchamia proces, w tym przypadku wiersz polecenia.

-Verb RunAs uruchamia polecenie jako admin.

-Argument-List uruchamia polecenie z argumentami.

Nasze argumenty są '/c cd /d %CD% && %*'. %*oznacza wszystkie argumenty, więc jeśli tak sudo foo bar, to uruchomiłoby się w wierszu poleceń, foo barponieważ parametry to foo i bar, i %*zwraca foo bar. cd /d %CD%to polecenie przejścia do bieżącego katalogu. Zapewni to, że po otwarciu okna z podwyższonym poziomem uprawnień katalog będzie taki sam, jak normalne okno. to &&oznacza, że jeśli pierwsze polecenie zakończy się powodzeniem, należy uruchomić drugą komendę.

Jest /cto parametr cmd do zamykania okna po zakończeniu polecenia, a /kto parametr cmd do utrzymywania otwartego okna.

Kredyt dla Adama Plocher do pobytu w bieżącym Kod klasyfikacji.


Jednym z problemów jest to, że po podniesieniu poziomu nie jesteś już w obecnym folderze, ale raczej w C:\Windows\System32.
noseratio

2
@noseratio prawda, wygląda na to, że zmiana na to powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
załatwi sprawę

@AdamPlocher, to może działać, ale może powodować problemy, jeśli wiersz poleceń %*zawiera cudzysłowy. Dlatego stworzyłem wsudo, oparty na PowerShell.
noseratio

To jest podniesienie uprawnień konta użytkownika w grupie Administratorzy; sudo to kolejna rzecz.
Massimo

Czy nie możesz po prostu pominąć echowiersza pierwszego i trzeciego, poprzedzając @wiersz PowerShell?
nudl

14

Wszystkie odpowiedzi wyjaśniają, jak zwiększyć swoje polecenie w nowym hoście konsoli.

To, co mnie rozbawiło, to to, że żadne z tych narzędzi nie zachowuje się jak *nix sudo, pozwalając na wykonanie polecenia wewnątrz bieżącej konsoli.

Tak więc napisałem: gsudo

Kod źródłowy https://github.com/gerardog/gsudo

Instalacja

Przez czerpak

  • Zainstaluj miarkę, jeśli jeszcze jej nie masz. Następnie:
scoop install gsudo

Albo przez Chocolatey

choco install gsudo

Instalacja ręczna:

Próbny

gsudo demo


9

Stworzyłem narzędzie CLI wsudoo otwartym kodzie źródłowym sudodla systemu Windows do uruchamiania programów lub poleceń z podwyższonymi uprawnieniami, w kontekście bieżącego katalogu . Jest dostępny w opakowaniu Chocolatey .

Używam go często do rzeczy takich jak konfigurowanie agentów kompilacji, czynności administracyjne sfc /scannow, dism /online /cleanup-image /restorehealthlub po prostu do instalowania / aktualizowania moich lokalnych pakietów Chocolatey. Używaj na własne ryzyko.

Instalacja

choco install wsudo

Chocolatey musi być już zainstalowane.

Cel, powód

wsudoto sudopodobne do Linuksa narzędzie dla systemu Windows do wywoływania programu z podwyższonymi uprawnieniami (jako Administrator) z wiersza poleceń powłoki innej niż administrator i utrzymywania jego bieżącego katalogu.

Ta implementacja nie zależy od starszego hosta skryptów systemu Windows ( CScript). Zamiast tego używa pomocniczego skryptu programu PowerShell 5.1, który wywołuje polecenia "Start-Process -Wait -Verb runAs ..."cmdlet. Twój system najprawdopodobniej ma już zainstalowany program PowerShell 5.x, w przeciwnym razie zostaniesz zaoferowany do zainstalowania go jako zależności.

Stosowanie

wsudouruchamia program lub polecenie wbudowane z podwyższonymi uprawnieniami w bieżącym katalogu. Przykłady:

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

Aby uzyskać więcej informacji, odwiedź repro GitHub .


2
Dziękuję za opublikowanie "wsudo", jest dla mnie całkiem przydatne. Myślę, że zaletą twojego wsudo jest utrzymywanie katalogu roboczego w przeciwieństwie do alternatyw. Nie mogłem znaleźć innego, który mógłby zachować CWD niż wsudo. Myślę, że powinieneś podkreślić ten punkt w opisie. Naprawdę doceniam twoją pracę.
benok

3
Jeszcze jedna rzecz, o której warto wiedzieć. Czy wiesz, jak hakować pasek adresu, aby bezpośrednio otworzyć powłokę? Zwykle używam tego hacka, ale byłem bardzo sfrustrowany, gdy chciałem uzyskać podwyższoną powłokę z tym hackiem. Próbowałem znaleźć wiele alternatyw, ale nie działa. Wreszcie mogę otworzyć jeden z "wasudo [powłoka]". Uwielbiam to mieć.
Jeszcze

3
@benok, tak, to naprawdę poręczny hack! Cieszę się, wasudoże ci to ułatwiło. Sam przeważnie mieszkam w zintegrowanym terminalu konsoli VSCode, więc po prostu wasudotam piszę :) Następnym ulepszeniem byłoby dziedziczenie zmiennych środowiskowych .
noseratio

Cześć @benok, możesz być także zainteresowany moim nowym narzędziem poprawiającym wydajność kopiowania / wklejania / uruchamiania, DevComrade :)
noseratio


4

Normalnie byś tego nie zrobił, ponieważ i tak nie uruchomiłbyś go pod * nix. Wykonuj programowanie w katalogu użytkownika, a następnie wdrażaj w katalogach systemowych.





2

Poniższy skrypt vbs pozwala na uruchomienie danej komendy z argumentami z podniesieniem poziomu i naśladuje zachowanie oryginalnej komendy sudo unixa dla ograniczonego zbioru użytych przypadków (nie będzie buforował poświadczeń ani nie pozwala na prawdziwe wykonywanie komend z różnymi poświadczeniami). Założyłem to 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

Przykładowe użycie w wierszu polecenia sudo net start service


1
jak sprawić, by skrypt czekał na dane wejściowe użytkownika, abyśmy mogli odczytać dane wyjściowe programu powłoki?
Ahmad Hajjar

1
Masz na myśli interaktywne polecenie powłoki? Cóż, powinieneś najpierw spróbować upewnić się, że uruchomione polecenie będzie czekało na zwrot. Tutaj wydaje się, że to możliwe. Następnie powinieneś pobrać dane wyjściowe z obiektów powłoki i wyprowadzić je, co, jak sądzę, jest również możliwe. Nie spodziewaj się jednak, że wszystko, co możesz zrobić w unixie, będzie możliwe.
ceztko

W systemie Windows 10 zgłasza błąd składni w linii 1, znak 6.
Martin Braun,

To jest podniesienie uprawnień konta użytkownika w grupie Administratorzy; sudo to kolejna rzecz.
Massimo

1

Myślę, że po przeprowadzeniu pewnych badań wypróbowałem poniższe kroki i udało mi się

1.Zainstaluj scoop za pomocą programu PowerShell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. wykonaj instalację scoop --global sudo 3. upewnij się, że ścieżki (C: \ Users \\ scoop \ shims & C: \ ProgramData \ scoop \ shims) dodane w zmiennej ścieżki środowiskowej.


1

W przypadku okien nie ma polecenia sudo, a także nie ma potrzeby umieszczania znaku $. Aby zainstalować Angular CLI za pomocą wiersza poleceń node.js w systemie Windows, po prostu napisałem npm install -g @ angular / cli, a następnie nacisnąłem Enter. Działało dobrze.


0

otwórz konsolę jako administrator. Kliknij prawym przyciskiem myszy wiersz polecenia lub bash -> więcej i wybierz „Uruchom jako administrator”


0

W Windows Powershell możesz użyć polecenia Start-Process z opcją -Verb RunAsuruchomienia i podwyższonego poziomu procesu. Oto przykład mojej funkcji sudo:

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

Np .: Otwórz plik hostów jako Administrator w notatniku

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

0

Użycie sudopolecenia dla użytkowników okien daje następujące sugestie:

Najpierw zainstaluj scoopnarzędzie do zarządzania pakietami i wykonaj następujące polecenia:

wprowadź opis obrazu tutaj

Następnie użyj, scoopaby zainstalować sudopolecenie:

wprowadź opis obrazu tutaj

Na koniec możesz wykonać polecenie za pomocą sudo:

wprowadź opis obrazu tutaj


0

Bardzo się cieszę mogąc Ci pomóc.

Aby wykonać polecenie sudo, wykonaj następujące czynności: -

  1. Utwórz folder env w C: \ Drive.
  2. Utwórz folder w folderze env o nazwie bin.
  3. Teraz dodaj C: \ env \ bin do swojej ŚCIEŻKI.
  4. Utwórz plik sudo.bat w C: \ env \ bin.
  5. Edytuj go za pomocą notatnika i napisz ten kod: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Mam nadzieję, że to ci pomoże


Ta odpowiedź powinna zawierać tekst pliku wsadowego i nie zależeć od linku poza witryną z powodu gnicia linków. Odpowiedź powinna również zawierać zastrzeżenie, że ten skrypt stara się naśladować zgrubne zachowanie sudo, ale tak naprawdę nie jest sudo (jest to pseudo-sudo).
asky

0

Aby po prostu uruchomić polecenie jako administrator w Powershell bez podwyższonych uprawnień, możesz użyć Start-Processbezpośrednio, szczególnie z odpowiednimi opcjami -Verb runas.

Jest to o wiele bardziej zawiłe niż sudo, zwłaszcza że nie można po prostu ponownie użyć poprzedniego polecenia z dodatkową opcją. Musisz osobno określić argumenty polecenia.

Oto przykład użycia polecenia route do zmiany bramy:

To się nie udaje, ponieważ nie jesteśmy w podwyższonym PS:

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

Działa to po zaakceptowaniu UAC:

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

Lub dla polecenia, które wymaga cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.