Cách chạy lệnh 'sudo' trong Windows


92

Làm cách nào để chạy lệnh sau trong windows:

$ sudo django-admin.py startproject NEW

?


Tốt hơn là tránh sử dụng các lệnh đầu cuối trong Windows. Thay vào đó, hãy thử làm điều tương tự với sự trợ giúp của IDE, như Eclipse + PyDev. Nó sẽ giúp mọi thứ đơn giản hơn rất nhiều.
Pushpak Dagade,

7
@Pushpak Dagade: Nói chung, tôi đã rất ngạc nhiên với nhận xét của bạn, nhưng khi tôi gõ cái này, tôi nhận ra đây là STACK OVERFLOW. Đây là những người NÊN sử dụng thiết bị đầu cuối trong Windows. =) Ý tôi là, PowerShell có thể sẽ không tồn tại nếu không.
Brent Rittenhouse

2
Ngoài ra, điều gì sẽ xảy ra nếu anh ta đang tạo một kịch bản để tự động hóa một nhiệm vụ? (Vâng, tôi nhận ra rằng mình có thể chạy RẰNG là người dùng priviledged.)
Brent Rittenhouse

Hãy thử wsudo của tôi , một công cụ giống như sudo dành cho Windows có sẵn dưới dạng gói Chocolatey.
mũi,

Câu trả lời:


97

Không có sudolệnh nào trong Windows. Tương đương gần nhất là "chạy với tư cách quản trị viên."

Bạn có thể thực hiện việc này bằng runaslệnh với cấp độ tin cậy của quản trị viên hoặc bằng cách nhấp chuột phải vào chương trình trong giao diện người dùng và chọn "chạy với tư cách quản trị viên".


4
Bạn có biết nếu hành vi của runas khác nhau giữa các phiên bản? Tôi đã cài đặt Win7 Enterprise và tất cả các kết hợp tôi đã thử với runas sẽ tạo cmd mới mà không có đặc quyền quản trị
notNullGothik

4
Sudo dành cho Windows (sudowin) cho phép người dùng được ủy quyền khởi chạy các quy trình có đặc quyền nâng cao bằng cách sử dụng cụm mật khẩu của riêng họ. Không giống như lệnh runas, Sudo cho Windows lưu giữ hồ sơ của người dùng và quyền sở hữu các đối tượng đã tạo. Bạn có thể lấy nó ở đây: sourceforge.net/projects/sudowin
Joe Bigler

Kiểm tra gsudo( stackoverflow.com/a/58753166/97471 ). Đó là một ưu điểm cho các cửa sổ có *nix sudotrải nghiệm người dùng: Cho phép thực thi lệnh bên trong bảng điều khiển hiện tại và bộ nhớ cache thông tin xác thực (chỉ một cửa sổ bật lên UAC).
Gerardo Grignoli

runas là nâng cao tài khoản người dùng trong Quản trị viên; sudo là một thứ khác. Đây không phải là câu trả lời được chấp nhận.
Massimo

14

Mở notepad và dán mã này:

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

Sau đó, lưu tệp dưới dạng sudo.cmd. Sao chép tệp này và dán vào C:\Windows\System32hoặc thêm đường dẫn sudo.cmdvào Biến Môi trường PATH của bạn.

Khi bạn mở dấu nhắc lệnh, bây giờ bạn có thể chạy một cái gì đó như sudo start ..

Nếu bạn muốn cửa sổ nhắc lệnh quản trị luôn mở khi bạn chạy lệnh, hãy thay đổi mã trong notepad thành sau:

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

Giải trình:

powershell -Command chạy lệnh powershell.

Start-Process là một lệnh powershell bắt đầu một quá trình, trong trường hợp này là dấu nhắc lệnh.

-Verb RunAs chạy lệnh với tư cách quản trị viên.

-Argument-List chạy lệnh với các đối số.

Lập luận của chúng tôi là '/c cd /d %CD% && %*'. %*có nghĩa là tất cả các đối số, vì vậy nếu bạn làm vậy sudo foo bar, nó sẽ chạy trong dấu nhắc lệnh foo barvì các tham số là foo và bar, và %*trả về foo bar. cd /d %CD%là một lệnh để đi đến thư mục hiện tại. Điều này sẽ đảm bảo rằng khi bạn mở cửa sổ nâng lên, thư mục sẽ giống như cửa sổ bình thường. các &&phương tiện rằng nếu lệnh đầu tiên thành công, hãy chạy lệnh thứ hai.

Đây /clà tham số cmd để đóng cửa sổ sau khi lệnh kết thúc và /klà tham số cmd để giữ cửa sổ mở.

Tín dụng cho Adam Plocher cho việc lưu lại mã thư mục hiện tại.


Một vấn đề với điều đó là sau khi được nâng lên, bạn không còn ở trong thư mục hiện tại nữa, mà là ở trong C:\Windows\System32.
mũi

2
@noseratio đúng, dường như thay đổi nó để điều này sẽ làm các trick, tuy nhiên:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/k cd /d %CD% && %*'"
Adam Plocher

@AdamPlocher, có thể hoạt động nhưng có thể gặp sự cố nếu dòng lệnh %*có dấu ngoặc kép. Đó là lý do tại sao tôi đã tạo wsudo, dựa trên PowerShell.
mũi,

Đây là nâng cao tài khoản người dùng trong Quản trị viên; sudo là một thứ khác.
Massimo

Bạn có thể không bỏ qua echodòng một và dòng ba bằng cách viết trước @dòng powershell được không?
nudl

9

Tất cả các câu trả lời giải thích cách nâng cao lệnh của bạn trong máy chủ bảng điều khiển mới .

Điều khiến tôi thích thú là không có công cụ nào trong số đó hoạt động giống như vậy *nix sudo, cho phép thực thi lệnh bên trong bảng điều khiển hiện tại .

Vì vậy, tôi đã viết: gsudo

Mã nguồn https://github.com/gerardog/gsudo

Cài đặt

Qua tin sốt dẻo

scoop install gsudo

Hoặc qua Chocolatey

choco install gsudo

Cài đặt thủ công:

Bản giới thiệu

gsudo demo


8

Tôi đã tạo wsudo, một sudocông cụ CLI giống mã nguồn mở dành cho Windows để chạy các chương trình hoặc lệnh với quyền nâng cao, trong ngữ cảnh của thư mục hiện tại . Nó có sẵn dưới dạng gói Chocolatey .

Tôi sử dụng nó rất nhiều cho những thứ như cấu hình các đại lý xây dựng, mọi thứ quản trị như sfc /scannow, dism /online /cleanup-image /restorehealthhoặc đơn giản là để cài đặt / cập nhật các gói Chocolatey địa phương của tôi. Sử dụng có nguy cơ của riêng bạn.

Cài đặt

choco install wsudo

Chocolatey phải được cài đặt.

Mục đích

wsudolà một sudocông cụ giống Linux dành cho Windows để gọi một chương trình có quyền nâng cao (với tư cách là Quản trị viên) từ dấu nhắc lệnh shell không phải quản trị viên và giữ thư mục hiện tại của nó.

Việc triển khai này không phụ thuộc vào Windows Script Host ( CScript) cũ. Thay vào đó, nó sử dụng tập lệnh PowerShell 5.1 trợ giúp gọi "Start-Process -Wait -Verb runAs ..."lệnh ghép ngắn. Hệ thống của bạn rất có thể đã được cài đặt PowerShell 5.x, nếu không, bạn sẽ được đề nghị cài đặt nó như một phần phụ thuộc.

Sử dụng

wsudochạy một chương trình hoặc một lệnh nội tuyến với các quyền nâng cao trong thư mục hiện tại. Ví dụ:

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

Để biết thêm chi tiết, hãy truy cập repro GitHub .


2
Cảm ơn bạn đã xuất bản "wsudo", nó khá hữu ích cho tôi. Tôi nghĩ lợi thế của wsudo của bạn là giữ cho thư mục làm việc không giống như các lựa chọn thay thế. Tôi không thể tìm thấy ai có thể giữ cho trẻ khuyết tật ngoài wsudo. Tôi nghĩ bạn nên nhấn mạnh điểm này trong phần mô tả. Tôi thực sự đánh giá cao công việc của bạn.
benok

3
Một điều nữa cho bạn biết. Bạn có biết hack thanh địa chỉ để mở shell trực tiếp không? Tôi thường sử dụng bản hack này, nhưng tôi đã rất thất vọng khi tôi muốn nhận được vỏ cao với bản hack này. Tôi đã cố gắng tìm nhiều giải pháp thay thế nhưng không hiệu quả. Cuối cùng tôi có thể mở một cái bằng "wasudo [shell]". Tôi thích có cái này. Cảm ơn một lần nữa :-)
benok

3
@benok, tôi biết, đó thực sự là một bản hack tiện dụng! Rất vui vì wasudođã giúp bạn dễ dàng hơn. Bản thân tôi chủ yếu sống trong thiết bị đầu cuối bảng điều khiển tích hợp VSCode, vì vậy tôi chỉ cần gõ vào wasudođó :) Cải tiến tiếp theo sẽ là kế thừa các vars môi trường .
mũi,

Xin chào @benok, bạn cũng có thể quan tâm đến tiện ích mới của tôi để cải thiện năng suất sao chép / dán / chạy, DevComrade :)
noseratio

5

runaslệnh yêu cầu người dùng nhập mật khẩu. Nếu bạn không muốn nhập mật khẩu và chỉ muốn nhấp vào hộp thoại UAC, hãy sử dụng Start-Process -Verb runastrong PowerShell thay vì runaslệnh.

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


Đây là nâng cao tài khoản người dùng trong Quản trị viên; sudo là một thứ khác.
Massimo

4

Bạn thường sẽ không làm như vậy, vì bạn sẽ không chạy nó dưới * nix bất kể. Thực hiện phát triển trong một thư mục người dùng và triển khai sau đó đến các thư mục hệ thống.





2

Tập lệnh vbs sau đây cho phép khởi chạy một lệnh nhất định với các đối số có độ cao và bắt chước hành vi của lệnh unix sudo ban đầu cho một số trường hợp được sử dụng hạn chế (nó sẽ không lưu thông tin đăng nhập vào bộ nhớ cache cũng như không cho phép thực thi các lệnh với các thông tin đăng nhập khác nhau). Tôi mặc nó vào 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


1
làm thế nào chúng ta có thể làm cho tập lệnh chờ đợi đầu vào của người dùng, vì vậy chúng ta có thể đọc đầu ra của chương trình shell?
Ahmad Hajjar

1
Ý bạn là lệnh shell tương tác? Trước tiên, bạn nên cố gắng đảm bảo rằng lệnh được khởi chạy sẽ được chờ trả về. Ở đây có vẻ như nó có thể. Sau đó, bạn sẽ lấy đầu ra từ các đối tượng shell và xuất nó, tôi đoán nó cũng có thể. Tuy nhiên, đừng mong đợi mọi thứ bạn có thể làm trong unix đều có thể thực hiện được.
ceztko

Trên cửa sổ 10 nó ném một lỗi cú pháp trên dòng 1 char 6.
Martin Braun

Đây là nâng cao tài khoản người dùng trong Quản trị viên; sudo là một thứ khác.
Massimo

1

Tôi nghĩ rằng tôi đã thử các bước dưới đây sau khi thực hiện một số nghiên cứu và đã thành công

1. cài đặt bản tin bằng cách sử dụng powershell 3 (iex (new-object net.webclient) .downloadstring (' https://get.scoop.sh ')) 2. thực hiện cài đặt bản tin --global sudo 3. đảm bảo đường dẫn (C: \ Users \\ muỗng \ shims & C: \ ProgramData \ muỗng \ shims) được thêm vào biến đường dẫn môi trường.


1

Không có lệnh sudo trong trường hợp cửa sổ và cũng không cần đặt bất kỳ $ nào. Để cài đặt Angular CLI thông qua dấu nhắc lệnh node.js trong windows, tôi chỉ cần viết npm install -g @ angle / cli và sau đó nhấn Enter. Nó hoạt động tốt.


0

mở bảng điều khiển với tư cách quản trị viên. Nhấp chuột phải vào dấu nhắc lệnh hoặc bash -> khác và chọn "chạy với tư cách quản trị viên"


0

Trong Windows Powershell, bạn có thể sử dụng lệnh Start-Process với tùy chọn -Verb RunAsđể bắt đầu và quá trình nâng cao. Đây là ví dụ về hàm sudo của tôi:

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

Ví dụ: Mở tệp máy chủ lưu trữ dưới dạng Quản trị viên trong notepad

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

0

Sử dụng sudolệnh cho người dùng cửa sổ cung cấp cho bạn các đề xuất sau:

Đầu tiên, cài đặt scoopcông cụ quản lý gói và thực hiện các lệnh sau:

nhập mô tả hình ảnh ở đây

Sau đó, sử dụng scoopđể cài đặt sudolệnh:

nhập mô tả hình ảnh ở đây

Cuối cùng, bạn có thể thực hiện lệnh với sudo:

nhập mô tả hình ảnh ở đây


0

Tôi vui để giúp bạn.

Để tạo một lệnh sudo, hãy làm theo các bước: -

  1. Tạo một thư mục env trong C: \ Drive.
  2. Tạo một thư mục bên trong thư mục env có tên là bin.
  3. Bây giờ hãy thêm C: \ env \ bin vào PATH của bạn.
  4. Tạo tệp sudo.bat trong C: \ env \ bin.
  5. Chỉnh sửa nó bằng notepad và viết mã này: -
    https://gist.github.com/coder-examples/5ca6c141d6d356ddba4e356d63fb2c13

Hy vọng điều này sẽ giúp bạn


Câu trả lời này nên bao gồm văn bản của tệp loạt, không phụ thuộc vào một liên kết ngoài trang web vì liên kết bị thối. Ngoài ra, câu trả lời nên bao gồm tuyên bố từ chối trách nhiệm rằng tập lệnh này tìm cách mô phỏng hành vi thô của sudo, nhưng không thực sự là sudo (đó là một sudo giả).
asky

0

Để chỉ chạy một lệnh với tư cách là quản trị viên trong Powershell không nâng cao, bạn có thể sử dụng Start-Processtrực tiếp với các tùy chọn phù hợp, đặc biệt -Verb runas.

Nó phức tạp hơn nhiều so với sudo , đặc biệt là vì bạn không thể chỉ sử dụng lại lệnh trước đó với một tùy chọn bổ sung. Bạn cần chỉ định riêng các đối số cho lệnh của mình.

Đây là một ví dụ, sử dụng lệnh route để thay đổi cổng vào:

Điều này không thành công vì chúng tôi không ở trong một PS nâng cao:

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

Điều này hoạt động sau khi chấp nhận UAC:

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

Hoặc đối với một lệnh yêu cầu cmd.exe:

> Start-Process cmd -ArgumentList "/c other_command arguments ..." -Verb runas
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.