Có lệnh 'sudo' nào cho Windows không?


449

Tôi luôn làm việc trên tài khoản không phải quản trị viên trên máy tính Windows của mình. Đôi khi tôi cần cài đặt các chương trình yêu cầu quyền truy cập của quản trị viên. Vì tôi chủ yếu sử dụng dấu nhắc lệnh của Windows, có lệnh Windows để tăng các đặc quyền, tương tự như lệnh của thiết bị đầu cuối Linux sudokhông?


7
Tôi tin rằng thuật ngữ bạn đang tìm kiếm là quyền truy cập "nâng cao". Mặc dù thông tin đăng nhập của bạn có quyền quản trị viên, các quy trình theo thông tin đăng nhập của bạn không có quyền quản trị viên cho đến khi bạn "sudo" lệnh. Trong Windows, họ gọi nó là "nâng cao".
Surfasb

7
@IGRACH không có quyền hạn của tôi ...
jiggunjer

2
Tôi sử dụng cái nàydoskey sudo= runas /user:Administrator "cmd /k cd \"%cd%\" & $*"
William

1
Hãy dùng thử wsudo, một sudocông cụ tương tự cho Windows có sẵn dưới dạng gói Chocolatey.
chơi

Câu trả lời:


267

Lệnh runas .

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

Chỉ cần chạy:

runas /noprofile /user:Administrator cmd 

để bắt đầu một shell lệnh như một quản trị viên


22
Bạn có thể thấy bạn muốn hồ sơ được tải (ví dụ bao gồm các biến môi trường) cho bất kỳ việc sử dụng mở rộng nào. Trong trường hợp thả /noprofile.
Richard

6
Điều này không làm việc cho tôi. Sau khi tôi gõ mật khẩu, dấu nhắc lệnh được đóng lại.
Jonas

55
Đây không phải là yêu cầu mật khẩu của Quản trị viên? sudo đang hỏi mật khẩu của bạn !
n611x007

15
Thật không may, điều này là lỗi thời nghiêm trọng. Runaschỉ chạy các lệnh dưới một bộ thông tin xác thực khác nhau. Mặc dù thông tin đăng nhập của bạn có quyền quản trị viên, điều đó không có nghĩa là tất cả các quy trình trong thông tin đăng nhập của bạn đều chạy với tư cách quản trị viên.
Surfasb

12
+1 cho "lỗi thời" vì runas không thể vượt qua UAC. Thay vào đó, nhấn nút Windows, nhập cmd và nhấn Ctrl + Shift + Enter.
màu vàng êm dịu

125

Tôi đã phát hiện ra độ cao ngày hôm nay "thực thi một lệnh với độ cao đặc quyền UAC. Điều này rất hữu ích để làm việc bên trong các dấu nhắc lệnh hoặc với các tệp bó." Nó không giống như sudo, nó thay đổi người dùng thực thi thành Quản trị viên, nhưng cú pháp của nó dễ sử dụng hơn rất nhiều runasvà nó có thể giữ thư mục hiện tại, cho phép sử dụng các đường dẫn tương đối.

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

Mục đích của Nâng cao không phải là để giải quyết hoặc bỏ qua UAC (Kiểm soát tài khoản người dùng), mà là để làm việc với nó. Chừng nào UAC được kích hoạt có được một số loại nhanh chóng tại một số điểm trong quá trình này. Nếu bạn cần thoát khỏi việc nhắc nhở hoàn toàn, bạn phải tắt UAC .

Điểm đau nâng cao giảm bớt đang leo thang một quá trình cụ thể từ một vỏ không đặc quyền, và sau đó tiếp tục như bình thường. Nếu không có điều này, bạn cần bắt đầu một dấu nhắc lệnh đặc quyền bằng cách nhấp chuột phải> "Chạy với tư cách quản trị viên" , không thể dễ dàng viết kịch bản, trước khi thử lệnh đặc quyền.


5
Điều này trở nên hoàn hảo với "Nâng cao mà không cần nhắc" trong secpol.msc. Cùng nhau, họ làm tương tự như %wheel ALL=(ALL) NOPASSWD: ALLtrong sudo.
sayap

2
@sayap, để rõ ràng, ý bạn là thế này: ss64.com/nt/syntax-uac.html ?
matt wilkie

5
Rắc rối duy nhất tôi tìm thấy với elevate (v1.3.0) là nó không trả về mã lỗi từ chương trình mà nó đang nâng.
Ken

4
Sudo.bat: @elevate %*=> lợi nhuận!
Joe DF

10
Sẽ rất tốt khi đề cập rằng đó là một tiện ích bên ngoài, thiếu OOTB.
Hi-Angel

67

Bạn có thể sử dụng lệnh runas tương tự hoặc bạn có thể kiểm tra dự án sudo cho Windows tại SourceForge có thêm lệnh sudo.

Sự khác biệt là tinh tế:

Giả sử bạn có hai người dùng. Bob là một người dùng bình thường và James là một quản trị viên.

Nếu bạn đăng nhập với tư cách là Bob và sử dụng "runas james acommand", lệnh sẽ được chạy như thể nó được chạy bởi James, vì vậy nó truy cập vào cài đặt người dùng của James và mọi thay đổi người dùng sẽ vào thư mục cài đặt & tài liệu của James , v.v. đang cài đặt một ứng dụng, giả sử, nó sẽ được cài đặt như James, không phải là Bob.

Mặt khác, nếu Bob thực hiện "sudo acommand" thì lệnh vẫn chạy như Bob, nhưng với các quyền nâng cao - giống như lệnh sudo của Linux. Để ngăn bất kỳ người dùng nào có thể sudo, bạn phải xác định nhóm người dùng sudoers có chứa danh sách người dùng bình thường có quyền nâng cao bằng sudo. Người dùng vẫn phải cung cấp thông tin đăng nhập trước khi nâng.

Đôi khi sự khác biệt không quan trọng, đôi khi, và tôi thấy rằng cả hai lệnh đều có thể hữu ích.


2
Bạn có chắc không? Khi tôi chạy sudo trong Ubuntu, nếu chủ đề hiện tại của tôi ở trong ~/.themesđó thì ứng dụng sudo-ed sẽ không thể truy cập chủ đề đó, vì nó không ở trong /home/root/.themesvà sẽ sử dụng chủ đề gtk xấu xí mặc định.
hasen

5
@hasen j - vấn đề của bạn chỉ là vì ~ / .theme đánh giá trước khi lệnh được chạy (và do đó trước khi nó chuyển sang root).
Jared

1
Một giải pháp khác, ngoại trừ được lưu trữ trên GitHub, là Windosu: github.com/tehsenaus/windosu Tôi vừa tìm thấy nó, và nó dường như hoạt động rất tốt. Điều yêu thích là nó rất dễ cài đặt. Chỉ cần "npm cài đặt -g Windosu".
Venryx

39

Bạn cũng có thể sử dụng PowerToys Script Độ cao .


Tuyệt vời - chính xác những gì tôi đang tìm kiếm. Tôi không muốn chạy vì một lệnh có một người dùng khác, chỉ để chạy nó với các đặc quyền nâng cao.
orip

Chính xác là giải pháp đúng cho vấn đề này! Ai muốn Runas với cú pháp lộn xộn của nó?
Stablesog

1
Tôi thường ước lệnh nâng cao được tích hợp vào cửa sổ. Đó là một công cụ tuyệt vời.
nhinkle

giờ đây có một bộ sưu tập PowerToys nâng cao của cùng một tác giả mà từ đó việc tạo Tập lệnh tự nâng cao có liên quan đặc biệt.
matt wilkie

1
@barlop tất nhiên là không. Điều đó sẽ đánh bại mục đích của UAC.
nhinkle

29

Nếu bạn đã sẵn sàng để chuyển sang bảng điều khiển thay thế, có ConEmu (Tôi là tác giả). Một trong những tính năng của nó - khả năng chạy cả tab nâng cao và không nâng trong một cửa sổ ConEmu. Các tab có thể được bắt đầu với các thông tin khác nhau quá.

Để thoải mái cho người dùng, có tệp bó csudo.cmd (có thể dễ dàng chấp nhận để bash). Đọc mô tả đầy đủ trong wiki của dự án . Tóm lại, khi bạn chạy một số lệnh từ tab không nâng cao hiện tại, ví dụ:

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

ConEmu sẽ bắt đầu dismtrong bảng điều khiển / tab nâng cao mới (với dấu nhắc UAC trước trong hộp Vista hoặc Đăng nhập trong XP).

Theo mặc định, csudobắt đầu bảng điều khiển mới trong một tách (có thể thay đổi thông qua chỉnh sửa csudo.cmdnội dung).

Và tất nhiên bạn có thể đổi tên nó thành sudo.cmdnếu bạn thích từ "cổ điển" sudo.

sudo trong ConEmu / Windows


1
csudo từ lâu đã được đưa vào bản phân phối ConEmu. Không có liên kết là cần thiết ở tất cả.
Maximus

vấn đề ở đây là tab giao diện điều khiển mới trở nên không sử dụng được sau lệnh sudo'd. Vì vậy, bạn không thể tiếp tục làm việc trong tab nâng cao, chỉ cần nhận được một press enter or esc to exittin nhắn.
jiggunjer

1
Tất nhiên bạn không thể. Ngay cả trên Unix bạn cũng quay trở lại thiết bị đầu cuối không nâng cao sau khi sudolệnh được thực hiện xong! Bạn đang đi sai đường.
Maximus

1
1) nếu bạn sẽ mở một cửa sổ hoặc tab mới, bạn cũng có thể giữ nó, hãy để người dùng chọn nếu họ muốn tiếp tục. 2) Trên Ubuntu của tôi, tôi không phải sudo mỗi lần, độ cao kéo dài vài phút tôi nghĩ. 3) ứng dụng này có một triệu tùy chọn, nhưng không có gì cho điều này? Có lẽ tôi hư hỏng.
jiggunjer

24

Phương pháp nhanh:

Ba bước để thêm sudo.

  1. Mở PowerShell.

  2. Sao chép tập lệnh sau (Ctrl + C) và dán tập lệnh vào PowerShell (Alt + Space + 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. Trúng Enter.

Nó sẽ kích hoạt vĩnh viễn sudolệnh trong PowerShell.

Sử dụng:

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

Ví dụ:

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

Phương pháp dài để học:

Lưu ý: Tôi đã trộn tập lệnh từ cả hai bài viết để tạo tập lệnh đã nói ở trên. Thay vì dán thủ công tập lệnh trong notepad, tôi đã thêm các Out-Filecâu lệnh để lưu ps1$profilecác tập tin từ tập lệnh.

Mẹo: Nếu bạn không phải là một fan hâm mộ lớn của các cửa sổ bật lên UAC (như tôi), hãy lưu các mục sau trong tệp * .reg và chạy nó:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"ConsentPromptBehaviorAdmin"=dword:00000000

1
Tôi thích giải pháp powershell cho câu hỏi này. Đây phải là cách dễ nhất để nâng cao một cái gì đó. Các tập tin .bat hiện tại có thể dễ dàng được chuyển đổi sang POSH
Mitchell Skurnik

Có lỗi này trên windows 10:. : File C:\Users\User\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because running scripts is disabled on this system.
sowrov

@sowrov, xem [bài viết này] (www.faqforge.com/windows/windows-powershell-rucky-scripts-is-disables-on-this-system/). Theo mặc định, tập lệnh PowerShell bị tắt trên mọi cài đặt Windows. Bạn cần kích hoạt nó bằng lệnh này set-executionpolicy remotesigned. Các tùy chọn khác bên cạnh remotesignedđược mô tả trong các tài liệu chính thức .
quạ Vulcan

Độc giả lưu ý tập lệnh ps này là một trình bao bọc cho powershell -c start -verb runas program.exechức năng. Cũng lưu ý rằng bạn không thể nâng cao như thế này bằng dấu nhắc cmd (nguyên bản). Powershell là lựa chọn bản địa tốt nhất.
jiggunjer

điều tương tự có thể được thực hiện trong cmd.exe thay vì powershell env không? powershell không tính toán với clink và không có cửa sổ clink hoàn toàn không tính toán ...
PJJ

20

Nếu bạn đang làm điều này trên Windows, ngoài lệnh Run As như được đề cập trong một vài câu trả lời khác, cũng có những cách để làm điều này với chuột.

Nếu bạn giữ Shiftphím khi bạn nhấp chuột phải vào hầu hết các tệp thực thi trong Windows, bạn sẽ nhận thấy một vài tùy chọn nâng cao hơn. Một trong số đó là Run As...tùy chọn "" (tôi nghĩ nó được gọi là " Run As Administrator" từ Vista trở đi).

Bạn cũng có thể tải xuống phiên bản RunAs nâng cao hơn từ Microsoft, được gọi là ShellRunAs , phiên bản này có các cải tiến so với lệnh RunAs tích hợp, cả ở chế độ dòng lệnh và đồ họa, bao gồm cho phép bạn lưu thông tin đăng nhập tài khoản


4

Có một gói sô cô la cho nó với tên sudo thuận tiện . Bạn có thể cài đặt gói với chocolatey bằng lệnh này:

choco install -y sudo

Sau đó, trong bất kỳ trình bao Windows / MS nào bạn phải sử dụng, bạn có thể sử dụng sudonhư mong đợi.


3

Surun là ứng dụng mã nguồn mở miễn phí, cho phép các chương trình nhất định chạy với quyền quản trị mà không cần cung cấp mật khẩu mà không thay đổi sổ đăng ký người dùng hoặc sửa đổi các biến môi trường.

Khi tôi đang sử dụng Windows XP, ứng dụng này giúp tôi rất nhiều. Beta hoạt động trong Windows 7.


surun làm một công việc tuyệt vời. Tuy nhiên, đôi khi trong Windows 8 và 8.1, mặc định của nó không lý tưởng. Vì nó thay thế chức năng chạy của Windows, bạn không thể bắt đầu một dấu nhắc lệnh bằng cách nhấp chuột phải vào màn hình bắt đầu.
Sói

3

Như bạn có thể đã phát hiện ra, runas sẽ cho phép bạn chạy như một người dùng khác nhưng nó không thể thực hiện độ cao và nó không vượt qua các thư mục hiện tại, các biến môi trường hoặc các dòng lệnh dài.

Hamilton C shell giải quyết điều đó với một su và sudo chính hãng. su cho phép bạn chạy một lệnh như một người dùng khác; sudo (thực ra là bí danh của su) cho phép bạn chạy một lệnh nâng cao. Bạn cũng có thể làm cả hai, chạy nâng cao như một người dùng khác. Các thư mục hiện tại, các biến môi trường và các dòng lệnh dài được truyền bằng cách bắt tay bộ nhớ chia sẻ giữa su đang chạy trong ngữ cảnh của người gọi và một bản sao của chính nó chạy như một sự xen kẽ với các thông tin mới bắt đầu cho đứa trẻ. Tiết lộ đầy đủ: Tôi là tác giả.


1

Một sudosự thay thế hoạt động cho minttythiết bị đầu cuối của Cygwin sẽ là đặt đoạn script sau vào PATH của người dùng:

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

Đối với tôi đây là sự thay thế khả thi duy nhất để nâng cao các đặc quyền của các chương trình như vimhoặc cygrunsrvtrong khi làm việc trong một thiết bị đầu cuối trên Windows.


1

Kịch bản này thực hiện công việc:

@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

Lưu nó sudo.cmdsau đó thêm nó vào ĐƯỜNG của bạn

Lưu ý: runasphương tiện trong ngữ cảnh này "Chạy với tư cách quản trị viên" chứ không phải "Chạy như người dùng khác"

Lấy từ đây và chỉnh sửa một chút để xóa tiêu đề cscript.exe khỏi đầu ra


1
Điều này tạo ra một giao diện điều khiển mới. Cửa sổ mới sẽ biến mất sau khi lệnh sudo'd hoàn thành - vì vậy bạn thậm chí không thể đọc đầu ra.
jiggunjer

Đáng buồn thay, có. Nhưng nó có thể được sử dụng cho một số lệnh cơ bản (sao chép), công cụ GUI hoặc mở cmd quản trị viên.
Charles Milette

1

Giải pháp đơn giản nhất theo quan điểm của tôi là tận dụng quyền hạn để thực hiện công việc, đây là tính di động và sẽ nhắc người dùng sử dụng UAC.

Bạn chỉ có thể chạy cái này trong bất kỳ shell nào (cmd hoặc powershell)

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

0

Kịch bản vbs sau đây thực hiện thủ thuật cho tôi. Tôi mặc nó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

Ví dụ sử dụng trên dấu nhắc lệnh sudo net start service

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.