Làm thế nào để mở một cmd nâng cao bằng dòng lệnh cho Windows?


109

Làm cách nào để mở dấu nhắc lệnh nâng cao bằng các dòng lệnh trên cmd bình thường?

Ví dụ, tôi sử dụng runas /username:admin cmdnhưng cmd đã được mở dường như không được nâng lên! Bất kỳ giải pháp?


Tôi đã thử tất cả các câu trả lời. Câu trả lời hữu ích nhất mà không cần bất kỳ phần mềm nào và ít hành động nhất là stackoverflow.com/a/40942828/9217577
TheGuardener

Câu trả lời:


165

Tôi đã gặp phải vấn đề tương tự và cách duy nhất tôi có thể mở CMD với tư cách quản trị viên từ CMD là làm như sau:

  1. Mở CMD
  2. Viết powershell -Command "Start-Process cmd -Verb RunAs"và bấmEnter
  3. Một cửa sổ bật lên sẽ xuất hiện yêu cầu mở CMD với tư cách quản trị viên

2
Câu trả lời tốt. Tôi đã thêm và chỉnh sửa tôi đã sử dụng để làm cho nó chạy trong một dòng lệnh!
Tăng đoàn vào

1
Tôi đã tạo một tệp loạt với cái này và lưu nó dưới dạng admincmd.bat trong thư mục windows của mình, vì vậy tất cả những gì tôi phải làm là nhập "admincmd" nhấn enter và nó sẽ mở ra một cmd quản trị. (Tôi cũng đã thêm một dòng khác vào tệp loạt bằng " thoát" nên nó đóng cửa sổ không quản trị cmd)
Tony Brix

Tại sao không đặt cmd (và bất kỳ tham số nào) ở cuối. Có lệnh là kỳ lạ từ quan điểm dễ đọc.
Eric Fossum

38

Theo tài liệu , mô hình bảo mật Windows ...

không cấp đặc quyền quản trị mọi lúc. Ngay cả các quản trị viên cũng chạy theo các đặc quyền tiêu chuẩn khi họ thực hiện các tác vụ phi quản trị không yêu cầu các đặc quyền nâng cao.

Bạn có tùy chọn Tạo tác vụ này với đặc quyền quản trị trong hộp thoại Tạo tác vụ mới ( Trình quản lý tác vụ> Tệp> Chạy tác vụ mới ), nhưng không có cách tích hợp nào để nâng cao đặc quyền một cách hiệu quả bằng dòng lệnh.

Tuy nhiên, có một số công cụ của bên thứ ba (nội bộ dựa trên Windows API) mà bạn có thể sử dụng để nâng cao đặc quyền từ dòng lệnh:

NirCmd :

  1. Tải xuống và giải nén.
  2. nircmdc elevate cmd

windosu :

  1. Cài đặt nó: npm install -g windosu(yêu cầu cài đặt node.js )
  2. sudo cmd

3
Cảm ơn bạn, nircmdc elevate route delete 0.0.0.0 mask 0..0.0 192.168.1.1cuối cùng đã làm việc. Các runas /user:...cách khác được nhắc nhập mật khẩu mặc dù đã là quản trị viên (chế độ hàng loạt bị giết).
Marcos,

Cảm ơn vìnircmdc elevate cmd
tim

4
Sau intalling nircmd, để có nó làm việc như Linux sudo, tạo một sudo.batfile trong đường dẫn của bạn với nội dung này: nircmd elevate %*. Sau đó, bạn có thể làm, chẳng hạn,sudo net stop W3SVC
Kip

1
Tôi nghĩ cho đến nay, windosu là cách đơn giản và thanh lịch nhất để làm việc này, đặc biệt nếu bạn là một nhà phát triển ... cảm ơn. Tôi cảm thấy như tôi đang trên hệ thống nix: D
Emmanuel Mahuni

yêu windosu:)
Finlay Roelofs

32

Tôi không có đủ danh tiếng để thêm nhận xét vào câu trả lời hàng đầu, nhưng với sức mạnh của bí danh, bạn có thể thoát ra chỉ bằng cách gõ như sau:

powershell "start cmd -v runAs"

Đây chỉ là một phiên bản ngắn hơn của user3018703 giải pháp tuyệt vời:

powershell -Command "Start-Process cmd -Verb RunAs"

26

Cách đơn giản tôi đã làm sau khi thử các câu trả lời khác ở đây

Phương pháp 1: KHÔNG có chương trình của bên thứ 3 (tôi đã sử dụng cái này)

  1. Tạo một tệp có tên sudo.bat(bạn có thể thay thế sudobằng bất kỳ tên nào bạn muốn) với nội dung sau powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
  2. Di chuyển sudo.batđến một thư mục trong của bạn PATH; nếu bạn không biết điều đó có nghĩa là gì, chỉ cần chuyển các tệp này sangc:\windows\
  3. Bây giờ sudosẽ hoạt động trong hộp thoại Run ( win+r) hoặc trong thanh địa chỉ trình khám phá (đây là phần tốt nhất :))

Phương pháp 2: VỚI chương trình của bên thứ 3

  1. Tải về NirCmd và giải nén nó.
  2. Tạo một tệp có tên sudo.bat(bạn có thể thay thế sudobằng bất kỳ tên nào bạn muốn) với nội dung sau nircmdc elevate cmd /k "cd /d %cd%"
  3. Di chuyển nircmdc.exesudo.batđến một thư mục trong của bạn PATH; nếu bạn không biết điều đó có nghĩa là gì, chỉ cần chuyển các tệp này sangc:\windows\
  4. Bây giờ sudosẽ hoạt động trong hộp thoại Run ( win+r) hoặc trong thanh địa chỉ trình khám phá (đây là phần tốt nhất :))

Trong khi cả hai giải pháp làm việc, tiếc là họ sẽ dẫn đến việc UAC thoại hiển thị trên đầu trang (z-trật tự-khôn ngoan) nhưng không bị tập trung . (Đã kiểm tra trên Win10x64 v1607 build14393.447.)
Ogmios

@Ogmios thật kỳ quặc. hộp thoại hoạt động bình thường khi không được bắt đầu như thế này? Tôi đã rất vui khi sử dụng cái này mà không gặp vấn đề như vậy. Có thể do một số cấu hình khác mà bạn đã thay đổi?
Dheeraj Bhaskar

Có, hộp thoại UAC hoạt động như mong đợi trong tất cả các tình huống khác (tôi đã gặp phải). Đây là ngoại lệ duy nhất. Và tất nhiên tôi đã thay đổi hệ thống của mình theo những cách khác, nhưng tôi không tìm thấy bất kỳ điều gì có thể có tác động ẩn trên hộp thoại này.
Ogmios

@Ogmios xin lỗi bạn đời, tôi không thể nghĩ ra cách nào khác mà bạn có thể làm để sửa lỗi này. Bạn có thể nên thử các giải pháp khác để xem liệu chúng có tốt hơn cho bạn không. Cheers
Dheeraj Bhaskar

Mặc dù powershell không phải là bên thứ ba, nhưng nó không phải là một chương trình chứng khoán và bạn đang viết một chương trình của bên thứ ba để hoàn thành mục tiêu.
undrline

13

Tôi sử dụng các chương trình nirsoft (ví dụ: nircmdc) và sysinternals (ví dụ: psexec) mọi lúc. Họ rất hữu ích.

Nhưng nếu bạn không muốn hoặc không thể sử dụng chương trình của bên thứ 3, thì đây là một cách khác, thuần Windows.

Câu trả lời ngắn gọn : bạn có thể tạo một tác vụ đã lên lịch trong khi nâng cao với các đặc quyền nâng cao mà bạn có thể gọi sau khi không nâng cao.

Câu trả lời có độ dài trung bình : trong khi nâng cao tạo tác vụ với (nhưng tôi thích GUI của trình lập lịch tác vụ):

schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00

Sau đó, không cần độ cao, gọi bằng

schtasks /run /tn cmd_elev

Câu trả lời dài : Có rất nhiều chi tiết khó hiểu; xem mục blog của tôi "Khởi động chương trình KHÔNG CÓ UAC, hữu ích khi khởi động hệ thống và trong các tệp hàng loạt (sử dụng bộ lập lịch tác vụ)"


8

Phần sau dưới dạng tệp loạt sẽ mở một dấu nhắc lệnh nâng cao với đường dẫn được đặt thành cùng thư mục với đường dẫn từ nơi tệp lô được gọi

set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "

5

Cách yêu thích của tôi để làm điều này là sử dụng PsExec.exe từ SysInternals, có sẵn tại http://technet.microsoft.com/en-us/sysinternals/bb897553

.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe

Công tắc "-h" là một công cụ thực hiện điều kỳ diệu:

-h Nếu hệ thống đích là Vista hoặc cao hơn, hãy chạy quá trình với mã thông báo nâng cao của tài khoản, nếu có.


1
Để làm việc này, bạn phải chỉnh sửa các thuộc tính của psexec.exe và trên tab tương thích, hãy kiểm tra "Run as Administrator". Nếu không, bạn sẽ gặp lỗi: PSEXESVC chưa được cài đặt. Nhưng psexec gây ra sự cố với phím tab trong cmd.exe. Không thể sử dụng tab để điền tên thư mục.
Peter Quiring

Không chắc bạn đã thử trên môi trường nào nhưng tôi không cần thay đổi cài đặt "Chạy với tư cách quản trị viên" (bạn đang cố chạy cmd.exe trên máy từ xa của bạn?). Cũng không có vấn đề với phím tab, tôi có thể tập tin và thư mục hoàn thành công tên (ít nhất là thử nghiệm trên Win8.1 và Win10, chạy từ cả cmd và dòng lệnh PowerShell)
David Rodriguez

Tôi đang sử dụng Win10 và chạy nó cục bộ. Không chắc tại sao nó xảy ra với tôi và không phải bạn. Tôi đã làm cho nircmd hoạt động và nó không gây ra sự cố tab.
Peter Quiring

Tôi cũng nhận thấy rằng một người không thể tự động hoàn thành bằng phím tab, nhưng ít nhất điều này sẽ mở lời nhắc cmd nâng cao trong ngữ cảnh của người dùng khác, điều mà các phương pháp trước đây ở trên dường như không đạt được khi tôi thử. Cờ '-h' là tuyệt vời (windows 10), hoạt động tốt.
user1840734 Ngày

4

Làm cho tệp hàng loạt lưu thông tin đăng nhập của tài khoản quản trị viên thực bằng cách sử dụng /savecrednút chuyển. Điều này sẽ nhắc nhập thông tin đăng nhập lần đầu tiên và sau đó lưu trữ mật khẩu được mã hóa trong trình quản lý thông tin xác thực. Sau đó, đối với tất cả các lần chạy tiếp theo, lô sẽ chạy với tư cách quản trị viên đầy đủ nhưng không được nhắc nhập thông tin đăng nhập vì chúng được lưu trữ mã hóa trong trình quản lý thông tin xác thực và người dùng cuối không thể lấy được mật khẩu. Thao tác sau sẽ mở CMD nâng cao với đầy đủ đặc quyền của quản trị viên và sẽ chỉ nhắc nhập mật khẩu lần đầu tiên:

START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe

3

Trong khi cả hai giải pháp được cung cấp bởi Dheeraj Bhaskar làm việc, tiếc là họ sẽ dẫn đến việc UAC thoại hiển thị trên đầu trang (z-trật tự-khôn ngoan) nhưng không bị tập trung (cửa sổ tập trung là người gọi cmd / powershell cửa sổ), như vậy tôi hoặc là cần phải lấy chuột và nhấp vào "có" hoặc để chọn cửa sổ UAC bằng cách sử dụng Alt + Shift + Tab. (Đã thử nghiệm trên Win10x64 v1607 build14393.447; UAC = "[...] không làm mờ [...]" .)

Giải pháp sau đây hơi khó xử vì nó sử dụng hai tệp, nhưng nó bảo toàn thứ tự tiêu điểm chính xác, vì vậy không cần thêm thao tác chuột / bàn phím nào (ngoài việc xác nhận hộp thoại UAC: Alt + Y ).

  1. cmdadm.lnk (thuộc tính phím tắt / Nâng cao ... / Chạy với tư cách quản trị viên = BẬT) %SystemRoot%\System32\cmd.exe /k "cd /d"
  2. su.bat @start cmdadm.lnk %cd%

Chạy với su.


Tôi rất tiếc không thể tái tạo điều này. Bất cứ khi nào tôi sử dụng một trong hai giải pháp của mình. Lời nhắc UAC của tôi là tập trung và ở trên cùng
Dheeraj Bhaskar

3

Tôi đã sử dụng Elevatemột thời gian rồi.

Đó là mô tả - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.

Tôi sao chép bin.x86-64\elevate.exetừ .zipvào C:\Program Files\elevatevà thêm đường dẫn đó vào của tôi PATH.

Sau đó, tôi có thể chạy GitBash elevate sc stop W3SVCđể tắt IISdịch vụ.

Chạy lệnh cung cấp cho tôi UAChộp thoại, được tập trung đúng cách với điều khiển bàn phím và khi chấp nhận hộp thoại, tôi quay lại trình bao của mình.


3

..

@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF

:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!

MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1

lưu tập lệnh này dưới dạng "god.cmd" trong system32 của bạn hoặc bất cứ điều gì mà đường dẫn của bạn hướng đến ....

nếu bạn mở một cmd trong e: \ mypictures \ và nhập god, nó sẽ yêu cầu bạn cung cấp thông tin đăng nhập và đưa bạn trở lại nơi đó giống như quản trị viên ...


1
powershell thật tuyệt nhưng nó cần các mô-đun ... im oldscool ... chỉ cần hệ thống ...
jOte-

Phương pháp / thủ thuật nâng cao này cũng hoạt động với các đường dẫn / tên tệp dài? Hay tôi phải sử dụng "% ~ snx0" hoặc "% ~ dpsnx0" để thay thế?
script'n'code

2

Tương tự như một số giải pháp khác ở trên, tôi đã tạo một elevatetệp lô chạy cửa sổ PowerShell nâng cao, bỏ qua chính sách thực thi để cho phép chạy mọi thứ từ các lệnh đơn giản đến các tệp hàng loạt đến các tập lệnh PowerShell phức tạp. Tôi khuyên bạn nên gắn nó vào thư mục C: \ Windows \ System32 để dễ sử dụng.

Lệnh gốc elevatethực thi tác vụ của nó, ghi lại đầu ra, đóng cửa sổ PowerShell đã tạo và sau đó quay trở lại, ghi đầu ra đã bắt vào cửa sổ ban đầu.

Tôi đã tạo hai biến thể elevatepelevatextương ứng tạm dừng và giữ cho cửa sổ PowerShell mở để làm việc nhiều hơn.

https://github.com/jt-github/elevate

Và trong trường hợp liên kết của tôi bị chết, đây là mã cho tệp lô nâng cấp ban đầu:

@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!

REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue

if "%1"=="" (
    REM If no command is passed, simply open an elevated PowerShell window.
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
    REM Copy command+arguments (passed as a parameter) into a ps1 file
    REM Start PowerShell with Elevated access (prompting UAC confirmation)
    REM     and run the ps1 file
    REM     then close elevated window when finished
    REM Output captured results

    IF EXIST %temp%\trans.txt del %temp%\trans.txt
    Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
    Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
    PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
    Type %temp%\trans.txt
)

0

Có thể sử dụng một biến môi trường tạm thời để sử dụng với một phím tắt nâng cao (

start.cmd

setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"

ascladm.lnk (phím tắt)

_ properties\advanced\"run as administrator"=yes

(để thực hiện các thay đổi đường dẫn, bạn cần tạm thời tạo env.Variable)

_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"

_ properties\"start in"="%valueName_betterSpecificForEachCase%"

ascladm.cmd

setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"

) (TargetCmd được thực thi trong cửa sổ cmd nâng cao)

Mặc dù đó là 3 tệp, bạn có thể đặt mọi thứ (bao gồm cả targetCmd) trong một số thư mục con (đừng quên thêm tên folderName vào các bản vá lỗi) và đổi tên "start.cmd" thành một tên của mục tiêu

Đối với tôi, có vẻ như hầu hết cách thực hiện điều này tự nhiên, trong khi cmd không có lệnh cần thiết


tôi đã đọc tất cả các giải pháp trên và hiểu chúng. tôi không hiểu các bước của bạn. tôi đang chọn giải pháp với ưu và nhược điểm tốt nhất.
Dzmitry Lahoda

0

Tôi không chắc công cụ ExecEleised.exe (13KB) sẽ thực hiện công việc .... nhưng nó có thể. Hoặc ít nhất là hữu ích cho những người khác có nhu cầu tương tự đã truy cập trang này như tôi đã làm (nhưng tôi không tìm thấy giải pháp nên cuối cùng tôi đã tự tạo công cụ trong .Net).

Nó sẽ thực thi một ứng dụng với mã thông báo nâng cao (ở chế độ quản trị). Nhưng bạn sẽ nhận được một hộp thoại UAC để xác nhận! (có thể không nếu UAC đã bị vô hiệu hóa, chưa thử nghiệm nó).

Và tài khoản gọi công cụ cũng phải có admin. tất nhiên.

Ví dụ sử dụng:

ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"

2
Tôi chỉ thích câu trả lời là "Điều này có thể hoạt động chưa được kiểm tra" và tất nhiên là câu trả lời "không chắc chắn" ....
Giridhar Karnik

1
liên kết bị hỏng.
Dzmitry Lahoda

Liên kết tái lập, xin lỗi cho điều đó
MrCalvin

0

Phương pháp của Dheeraj Bhaskar với Powershell có một khoảng trống trong đó, ít nhất là đối với phiên bản Windows 10 của Powershell.

Dòng lệnh bên trong sudo.bat của anh ấy phải là

powershell.exe -Command "Start-Process cmd \"/k cd /d %cd% \" -Verb RunAs"

Lưu ý khoảng trống thừa sau% cd%

;) Frode


0

Đây là một cách để tích hợp với explorer. Nó sẽ bật lên một mục menu bổ sung khi bạn nhấp chuột phải vào bất kỳ thư mục nào trong Windows Explorer:

Tích hợp Windows Explorer

Đây là các bước:

  1. Tạo khóa này: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin
  2. Thay đổi giá trị Mặc định của nó thành bất kỳ giá trị nào bạn muốn xuất hiện dưới dạng văn bản mục menu. Ví dụ: "DOS Shell as Admin"
  3. Tạo một khóa khác này: \ HKEY_CLASSES_ROOT \ Folder \ shell \ dosherewithadmin \ command
  4. Thay đổi giá trị mặc định của nó thành giá trị này, ipsis litteris: powershell.exe -Command "Start-Process -Verb RunAs 'cmd.exe' -Args '/ k pushd"% 1 "" "
  5. Xong rôi. Bây giờ nhấp chuột phải vào bất kỳ thư mục nào và bạn sẽ thấy mục của mình ở đó trong các mục khác.

* Sử dụng pushd thay vì cd để cho phép nó hoạt động trong bất kỳ ổ đĩa nào. :-)


-1

Bạn có thể sử dụng cú pháp sau, tôi cũng có câu hỏi tương tự và không nghĩ rằng cần có script.

runas / profile / user: domain \ username cmd

Điều này hiệu quả với tôi, nó có thể khác trên mạng của bạn.


-1

Chỉ cần sử dụng lệnh: runas / noprofile / user: administrator cmd


-2

Tôi đã làm điều đó dễ dàng bằng cách sử dụng lệnh sau đây trong cmd

runas / netonly / user: Administrator \ Administrator cmd

Sau khi gõ lệnh này, bạn phải nhập mật khẩu Quản trị viên của mình (nếu bạn không biết mật khẩu Quản trị viên của mình, hãy để trống và nhấn Enter hoặc nhập một cái gì đó, đã làm việc cho tôi) ..


không giúp tôi
Dzmitry Lahoda

@DzmitryLahoda bạn có thể tóm tắt cho tôi lỗi mà bạn gặp phải không?
Harish Regada

-2

Nhấn phím Windows + X và bây giờ bạn có thể chọn Powershell hoặc Command Prompt với quyền quản trị. Hoạt động nếu bạn là quản trị viên. Chức năng này có thể không sử dụng được nếu hệ thống không phải của bạn.


-5

Có một số cách để mở cmd nâng cao, nhưng chỉ phương pháp của bạn hoạt động từ dấu nhắc lệnh chuẩn. Bạn chỉ cần đặt userkhông username:

runas /user:machinename\adminuser cmd

Xem trợ giúp liên quan từ cộng đồng Microsoft .


4
Điều này không giống với việc chạy một lệnh nâng cao, bởi vì khi tôi mở một cửa sổ cmd nâng cao và tôi gõ "whoami", nó sẽ mang lại kết quả giống như một cửa sổ không nâng cao. Khi tôi chạy "whoami / all" trong cả hai trường hợp, tôi có thể thấy sự khác biệt về quyền đối với cùng một người dùng.
Constantino Cronemberger

-5

Tôi đã sử dụng runas /user:domainuser@domain cmdnó đã mở một lời nhắc nâng cao thành công.


Nó yêu cầu thông tin đăng nhập của người dùng khác. Nếu bạn đã là Quản trị viên và muốn chạy với các đặc quyền nâng cao như khi bạn nhấp chuột phải vào ứng dụng và chọn chạy với tư cách quản trị viên và không yêu cầu mật khẩu, chỉ cần một hộp thoại xác nhận, thì bạn cần một thứ khác. Tôi đến đây để tìm kiếm câu trả lời đó nhưng dường như không có ở đây.
Paul-Sebastian Manole
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.