Czy istnieje jakieś polecenie „sudo” dla systemu Windows?

449

Zawsze pracuję na koncie innym niż administrator na moim komputerze z systemem Windows. Czasami muszę zainstalować programy, które wymagają dostępu administratora. Ponieważ najczęściej używam wiersza polecenia systemu Windows, czy istnieje polecenie systemu Windows służące do zwiększania uprawnień, podobnie jak polecenie terminalu systemu Linux sudo?

ukanth
źródło
7
Uważam, że termin, którego szukasz, to „podwyższony” dostęp. Mimo że twoje poświadczenia mają uprawnienia administratora, procesy na tych poświadczeniach nie mają uprawnień administratora, dopóki nie „sudo” polecenia. W systemie Windows nazywają to „podwyższeniem”.
surfasb
7
@IGRACH nie w mojej PowerShell ...
jiggunjer
2
Używam tegodoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William
1
Spróbuj mój wsudo, A sudo-jak narzędzie dla Windows dostępny jako pakiet Chocolatey.
noseratio

Odpowiedzi:

267

Komenda runas .

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

Po prostu biegnij:

runas /noprofile /user:Administrator cmd 

aby uruchomić powłokę poleceń jako administrator

Davy Landman
źródło
22
Może się okazać, że chcesz załadować profil (np. Łącznie ze zmiennymi środowiskowymi) do jakiegokolwiek rozszerzonego zastosowania. W takim przypadku upuść /noprofile.
Richard
6
To mi nie działa. Po wpisaniu hasła wiersz polecenia jest zamknięty.
Jonas,
55
czy to nie pyta o hasło administratora? sudo prosi o podanie hasła!
n611x007,
15
Niestety jest to bardzo nieaktualne. Runaspo prostu uruchamia polecenia z innym zestawem poświadczeń. Mimo że twoje poświadczenia mają uprawnienia administratora, nie oznacza to, że wszystkie procesy z poświadczeniami działają jako administrator.
surfasb
12
+1 za „przestarzałe”, ponieważ runy nie mogą ominąć UAC. Zamiast tego naciśnij przycisk Windows, wpisz cmd i naciśnij Ctrl + Shift + Enter.
łagodnożółty
125

Odkryłem dzisiaj Elevate, która „wykonuje polecenie z podniesieniem uprawnień UAC. Jest to przydatne do pracy w wierszach poleceń lub w plikach wsadowych”. To nie to samo sudo, co zmienia wykonującego użytkownika na Administratora, ale jego składnia jest o wiele prostsza w użyciu niż runasi może zachować bieżący katalog, umożliwiając korzystanie ze ścieżek względnych.

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

Celem Elevate nie jest obejście lub obejście UAC (Kontrola konta użytkownika), ale praca z nim. Tak długo, jak UAC jest włączony, w pewnym momencie procesu musi być jakiś monit . Jeśli chcesz całkowicie pozbyć się monitowania, musisz wyłączyć UAC .

Podwyższenie punktu bólu łagodzi eskalację konkretnego procesu z nieuprzywilejowanej powłoki, a następnie kontynuuje jak zwykle. Bez tego musisz uruchomić uprzywilejowany wiersz polecenia, klikając prawym przyciskiem myszy> „Uruchom jako administrator” , którego nie można łatwo wykonać skryptem, zanim spróbujesz wykonać uprzywilejowane polecenie.

matowe wilkie
źródło
5
Idealnie pasuje to do „Elevate bez monitowania” w secpol.msc. Razem robią to samo, co %wheel ALL=(ALL) NOPASSWD: ALLw sudo.
sayap
2
@ tak dla jasności, masz na myśli to: ss64.com/nt/syntax-uac.html ?
matt wilkie
5
Jedyny problem, jaki napotykam przy podniesieniu (wersja 1.3.0), to to, że nie zwraca kodu błędu z programu, który podnosi.
Ken
4
Sudo.bat: @elevate %*=> zysk!
Joe DF,
10
Miło byłoby wspomnieć, że jest to narzędzie zewnętrzne, brakuje OOTB.
Hi-Angel,
67

Możesz użyć polecenia runas, które jest podobne, lub możesz sprawdzić projekt sudo dla Windows w SourceForge, który dodaje polecenie sudo.

Różnica jest subtelna:

Załóżmy, że masz dwóch użytkowników. Bob jest normalnym użytkownikiem, a James jest administratorem.

Jeśli zalogujesz się jako Bob i użyjesz polecenia „runas james acommand”, polecenie zostanie uruchomione tak, jakby zostało uruchomione przez Jamesa, więc uzyskuje dostęp do ustawień użytkownika Jamesa, a wszelkie zmiany użytkownika przechodzą do folderów James My Documents i ustawień itp. Więc jeśli instalują aplikację, powiedzmy, zostanie ona zainstalowana jako James, a nie jako Bob.

Z drugiej strony, jeśli Bob wykona polecenie „sudo acommand”, polecenie jest nadal uruchamiane jako Bob, ale z podwyższonymi uprawnieniami - podobnie jak polecenie sudo w systemie Linux. Aby uniemożliwić dowolnemu użytkownikowi możliwość sudo, musisz zdefiniować grupę użytkowników sudoers, która zawiera listę zwykłych użytkowników, którzy mają uprawnienia do podniesienia uprawnień przy użyciu sudo. Użytkownicy nadal muszą podać poświadczenia przed podniesieniem uprawnień.

Czasami różnica nie jest ważna, czasem jest i uważam, że oba polecenia mogą być przydatne.

Simon P. Stevens
źródło
2
Jesteś pewny? Kiedy uruchamiam sudo w Ubuntu, jeśli mój obecny motyw jest włączony, ~/.themeswówczas aplikacja sudo nie będzie mogła uzyskać dostępu do tego motywu, ponieważ go nie ma /home/root/.themesi użyje domyślnego brzydkiego motywu GTK.
hasen
5
@hasen j - problem występuje tylko dlatego, że ~ / .themes ocenia przed uruchomieniem polecenia (a tym samym przed przełączeniem się na root).
Jared
1
Innym rozwiązaniem, z wyjątkiem hostowanym na GitHub, jest windosu: github.com/tehsenaus/windosu Właśnie go znalazłem i wydaje się, że działa świetnie. Ulubioną rzeczą jest bardzo łatwa instalacja. Wystarczy „npm install -g windosu”.
Venryx
39

Możesz także użyć narzędzia PowerToys do skryptu .

Quog
źródło
Niesamowite - dokładnie to, czego szukałem. Nie chciałem uruchamiać, ponieważ polecenie ma innego użytkownika, aby uruchomić je z podwyższonymi uprawnieniami.
orip
Dokładnie właściwe rozwiązanie tego problemu! Kto chce Runas z jego niechlujną składnią?
Stabledog
1
Często żałowałem, że polecenie podnoszenia nie jest wbudowane w okna. To fantastyczne narzędzie.
nhinkle
istnieje teraz kolekcja Elevation PowerToys tego samego autora, z której szczególnie ważne jest tworzenie skryptu samopodnoszącego .
matt wilkie
1
@barlop oczywiście nie. Byłoby to sprzeczne z celem UAC.
nhinkle
29

Jeśli jesteś gotowy, aby przejść na alternatywne konsole, jest ConEmu (jestem autorem). Jedna z jego funkcji - możliwość uruchamiania zarówno podwyższonych, jak i niewniesionych zakładek w jednym oknie ConEmu. Karty można również uruchamiać przy użyciu różnych danych uwierzytelniających.

Dla wygody użytkownika dostępny jest plik wsadowy csudo.cmd (który można łatwo dostosować do bash). Przeczytaj pełny opis na wiki projektu . W skrócie, na przykład po uruchomieniu polecenia z istniejącej niewniesionej karty

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

ConEmu uruchomi się dismw nowej podwyższonej konsoli / karcie (z poprzedzającym monitem UAC w Vista lub polem logowania w XP).

Domyślnie csudouruchamia nową konsolę w podziale (mogą być zmiany poprzez edycję csudo.cmdzawartości).

Oczywiście możesz zmienić jego nazwę, sudo.cmdjeśli lubisz sudosłowo „klasyczne” .

sudo w ConEmu / Windows

Maximus
źródło
1
csudo dawno temu został włączony do dystrybucji ConEmu. Link nie jest w ogóle potrzebny.
Maximus
Problem w tym, że nowa karta konsoli staje się bezużyteczna po poleceniu sudo'd. Więc nie możesz kontynuować pracy na podwyższonej karcie, po prostu otrzymaj press enter or esc to exitwiadomość.
jiggunjer
1
Oczywiście, że nie możesz. Nawet w Uniksie powracasz do nie podniesionego terminala po wykonaniu sudopolecenia! Idziesz w złym kierunku.
Maximus
1
1) jeśli chcesz otworzyć nowe okno lub kartę, równie dobrze możesz je zachować, pozwól użytkownikowi wybrać, czy chce kontynuować. 2) Na moim ubuntu nie muszę sudo za każdym razem, chyba podwyższenie trwa kilka minut. 3) ta aplikacja ma milion opcji, ale nic na to? Może jestem rozpieszczony.
jiggunjer
24

Szybka metoda:

Trzy kroki, aby dodać sudo.

  1. Otwórz PowerShell.

  2. Skopiuj następujący skrypt (Ctrl + C) i wklej go w PowerShell (Alt + Spacja + 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.

To na stałe włączy sudopolecenie w PowerShell.

Stosowanie:

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

Przykłady:

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

Długa metoda nauki:

Uwaga: Zmiksowałem skrypt z obu artykułów, aby utworzyć wyżej wspomniany skrypt. Zamiast wkleić ręcznie skrypt w notatniku dodałem Out-Fileinstrukcje do zapisania ps1i $profilepliki ze skryptu.

Wskazówka: jeśli nie jesteś wielkim fanem wyskakujących okienek UAC (takich jak ja), zapisz następujące w pliku * .reg i uruchom go:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000
kruk wulkaniczny
źródło
1
Uwielbiam rozwiązanie PowerShell dla tego pytania. To musi być najprostszy sposób na podniesienie poziomu. Istniejące pliki .bat można łatwo przekonwertować na POSH
Mitchell Skurnik
Dostałem ten błąd w . : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
systemie
@sowrov, patrz [ten artykuł] (www.faqforge.com/windows/windows-powershell-running-scripts-is-disabled-on-this-system/). Domyślnie skrypty PowerShell są wyłączone w każdej instalacji Windows. Musisz włączyć to za pomocą tego polecenia set-executionpolicy remotesigned. Inne opcje remotesignedsą opisane w oficjalnych dokumentach .
vulcan raven
Czytelnicy zauważają, że ten skrypt ps jest opakowaniem dla powershell -c start -verb runas program.exefunkcjonalności. Pamiętaj również, że nie możesz podwyższyć w ten sposób za pomocą monitu cmd (natywnie). Powershell to najlepsza opcja natywna.
jiggunjer
czy to samo można zrobić w cmd.exe zamiast env powershell? PowerShell nie oblicza się z brzękiem i bez kliknięcia okna w ogóle nie obliczają ...
PJJ
20

Jeśli robisz to w systemie Windows, oprócz polecenia Uruchom jako, jak wspomniano w kilku innych odpowiedziach, istnieją również sposoby wykonania tego za pomocą myszy.

Jeśli przytrzymasz Shiftklawisz i klikniesz prawym przyciskiem myszy większość plików wykonywalnych w systemie Windows, powinieneś zauważyć kilka bardziej zaawansowanych opcji. Jedną z nich jest Run As...opcja „ ” (myślę, że nazywa się „ Run As Administrator” od wersji Vista).

Możesz również pobrać bardziej zaawansowaną wersję RunAs od Microsoft, o nazwie ShellRunAs , która ma ulepszenia w stosunku do wbudowanego polecenia RunAs, zarówno w trybie wiersza poleceń, jak i w trybie graficznym, w tym umożliwia zapisywanie poświadczeń konta

GAThrawn
źródło
4

Jest do tego czekoladowy pakiet z wygodną nazwą sudo . Możesz zainstalować pakiet z Chocolatey za pomocą tego polecenia:

choco install -y sudo

Następnie w dowolnej powłoce Windows / MS, której musisz użyć, możesz używać sudozgodnie z oczekiwaniami.

ypid
źródło
3

Surun to darmowa aplikacja typu open source, która pozwala niektórym programom działać z prawami administracyjnymi, bez podawania hasła bez zmiany rejestru użytkowników lub modyfikacji zmiennych środowiskowych.

Kiedy korzystałem z systemu Windows XP, ta aplikacja bardzo mi pomaga. Beta działa pod Windows 7.

diimdeep
źródło
surun wykonuje świetną robotę. Jednak czasami pod Windows 8 i 8.1 jego ustawienia domyślne nie są idealne. Ponieważ zastępuje uruchamianie systemu Windows jako funkcję, nie można uruchomić wiersza polecenia prawym przyciskiem myszy na ekranie startowym.
Wolf
3

Jak zapewne odkryłeś, runy pozwolą ci działać jako inny użytkownik, ale nie mogą wykonywać podniesienia uprawnień i nie przechodzą przez bieżące katalogi, zmienne środowiskowe ani długie wiersze poleceń.

Powłoka Hamilton C rozwiązuje to dzięki oryginalnemu su i sudo. su pozwala uruchomić polecenie jako inny użytkownik; sudo (właściwie alias do su) pozwala uruchomić polecenie podniesione. Możesz także zrobić jedno i drugie, mając podniesione uprawnienia jako inny użytkownik. Bieżące katalogi, zmienne środowiskowe i długie wiersze poleceń są przekazywane przez uzgadnianie pamięci współużytkowanej między su działającym w kontekście dzwoniącego a jego kopią działającą jako interludium z nowymi poświadczeniami, które następnie uruchamiają dziecko. Pełne ujawnienie: jestem autorem.

Nicole Hamilton
źródło
1

Działającym sudozamiennikiem minttyterminala Cygwin byłoby umieszczenie następującego skryptu w ścieżce użytkownika:

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

Dla mnie jest to jedyna możliwa alternatywa, która podnosi uprawnienia programów takich jak vimlub cygrunsrvpodczas pracy w terminalu w systemie Windows.

karafior
źródło
1

Ten skrypt wykonuje zadanie:

@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

Zapisz go, a sudo.cmdnastępnie dodaj do ŚCIEŻKI

Uwaga: runasw tym kontekście oznacza „Uruchom jako administrator”, a nie „Uruchom jako inny użytkownik”

Wykonano stąd i poddano nieznacznej edycji w celu usunięcia nagłówka cscript.exe z wyjścia

Charles Milette
źródło
1
To tworzy nową konsolę. Nowe okno zniknie po zakończeniu polecenia sudo'd - nie można nawet odczytać danych wyjściowych.
jiggunjer
Niestety tak. Ale można go używać do niektórych podstawowych poleceń (kopiowanie), narzędzi GUI lub otwierania administracyjnego cmd.
Charles Milette,
1

Moim zdaniem najprostszym rozwiązaniem jest wykorzystanie PowerShell do wykonania pracy, która jest przenośna i zachęci użytkownika do korzystania z UAC.

Możesz po prostu uruchomić to w dowolnej powłoce (cmd lub PowerShell)

powershell Start-Process -verb runAs path-to-your.exe "-all -args -in -quotes"
twall
źródło
0

Poniższy skrypt VBS załatwia sprawę. Zakładam toC:\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ład użycia w wierszu polecenia sudo net start service

Ceztko
źródło