Cách chạy chương trình từ dòng lệnh với quyền nâng cao


44

Có cách nào để chạy một chương trình hoặc lệnh với quyền nâng cao khi tôi đã ở trong một dòng lệnh không nâng cao không?

Chính xác là hành động tương tự sẽ được thực hiện khi tôi nhấp vào phím tắt chương trình và chọn Chạy với tư cách quản trị viên .

Lệnh runas có lẽ không phải là một giải pháp - nó yêu cầu mật khẩu, nhưng tôi chỉ muốn hộp thoại UAC .

Câu trả lời:


14

Dường như tiện ích này - Hidden Start - sẽ làm những gì bạn muốn nếu bạn sử dụng công tắc / uac. Đây là một dòng lệnh ví dụ:

hstart /UAC "notepad.exe"

Điều này sẽ bật lên hộp thoại UAC thay vì yêu cầu mật khẩu như runas.

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


2
Cảnh báo: tiện ích nhỏ đó là 20 $. Đối với những người có túi nhỏ, thay vào đó hãy sử dụng RunAdmin :)
WeGoToMars

Điều này không xuất hiện trên Windows 10
sẽ vào

50

Có một cách để làm điều này trong PowerShell:

PS> Start-Process powershell -Verb runAs

19
Có vẻ để làm việc tốt. Từ dòng lệnh, bạn có thể làm ví dụpowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
soái ca

7
Điều này nên được đánh dấu là câu trả lời đúng / tốt nhất IMO - nó hoạt động mà không cần các tiện ích của bên thứ 3.
Crimbo

5
Xây dựng tắt của @marsze - Fwiw, đối số trong trường hợp đơn giản nhất đi vào giá trị duy nhất của mình trích dẫn, ví dụ powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Cảm ơn!
ruffin

Làm cách nào tôi có thể chuyển đầu ra của dấu nhắc lệnh nâng cao vào tập lệnh hiện đang thực thi của mình?
xe

@wheeler, tôi gần như chắc chắn bạn không thể làm điều đó, nhưng bạn có thể trả lại mã thoát:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam

6

Dựa trên câu trả lời của Rustam , bạn có thể:

  • Tạo một su.battệp bó ở đâu đó trong% PATH% mặc định của bạn, với một lớp lót sau:@powershell start -verb runas %*
  • Thêm chức năng này vào hồ sơ PowerShell $ của bạn :function su {start -verb runas @args}

Bây giờ bạn có thể phát hành su <command> [parameters]trong một trong hai vỏ!


2

RunAdmin là một tiện ích nhỏ (150Kb) cho phép bạn chạy một chương trình từ dòng lệnh với quyền nâng cao (nó sẽ hiển thị UAC). Và ngược lại với Hidden Start là sự tự do.


2

Điều này hoạt động với tôi trên tất cả các nền tảng, bao gồm cả Windows 10. Nhu cầu của tôi rất đơn giản, có lẽ bạn có thể điều chỉnh cách tiếp cận nếu bạn cần nguồn điện .

Tôi đã đưa ra một tập lệnh nhỏ có tên, sudo.cmdđược đặt tên cho lệnh sudo Linux. Nó hoạt động đủ tốt nó nghĩ. Tôi đã phác thảo các yêu cầu, các bước để làm theo và kịch bản ở gần cuối với một ví dụ. Đầu tiên một lời cảnh báo.

CẢNH BÁO : Lệnh chạy trong thư mục Hệ thống theo mặc định. Bạn sẽ muốncdđến một nơi an toàn đầu tiên.

yêu cầu :

  • Chạy lệnh với Administrator một đặc quyền từ windows .CMD
    hoặc cmd-shell.
  • yêu cầu kiểm tra đặc quyền Windows bình thường trên lệnh
    • Nói cách khác, lệnh sẽ KHÔNG hoạt động trừ khi tôi đã đăng nhập bằng tài khoản đặc quyền.
  • Thực thi lệnh với sự cho phép của Quản trị viên và tiếp tục khi được gọi bên trong một tập lệnh. Vì vậy, chờ lệnh hoàn thành.
  • Hãy đơn giản để nó luôn hoạt động
  • Không cần nhập mật khẩu mỗi lần, nếu tôi đã đăng nhập.
    • Một phương pháp tốt hơn sẽ là nếu tôi có thể nhập mật khẩu một lần cũng như sudolệnh thực sự trên Linux.

giải pháp :

  1. Tạo một kịch bản lệnh để thực thi tất cả các đối số được thông qua, sudo.cmd
  2. Tạo một lối tắt Windows cho tập lệnh lệnh nó : sudo.lnk.
  3. Đặt các phím sudotắt trong cửa sổ PATH của bạn để nó có thể được nhìn thấy.
  4. Chỉnh sửa các thuộc tính cắt ngắn, làm cho Start in:đường dẫn trống.
  5. Nhấp vào nút [ Advanced] - Kiểm traRun as Administrator
  6. Cho phép cắt ngắn trong đường dẫn windows của bạn, sử dụng biến môi trường PATHEXT, viz.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Khi bạn gõ sudo dirvào dòng lệnh, Windows sẽ hiển thị

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Kiểm soát truy cập bật lên. Nếu bạn nhấp vào "[ NO]" sẽ không có gì xảy ra. Windows sẽ hiển thị Access is denied.thông báo "".

Khi bạn nhấp vào "[ YES]" thì lệnh thư mục sẽ chạy ở đặc quyền nâng cao. Tất nhiên bạn có thể muốn một cái gì đó thú vị hơn như dừng hoặc truy vấn trên một dịch vụ:

 sudo sc query SDRSVC

SDRSVC là tên dịch vụ của "Dịch vụ sao lưu Windows", phần này hiển thị như sau trong một cửa sổ Cmd riêng:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

Bản sudo.cmdthân kịch bản rất cơ bản. Như tôi đã nói nhu cầu của tôi rất đơn giản. Tôi chỉ muốn dừng và bắt đầu dịch vụ trong khi tôi triển khai mã để thử nghiệm.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

Các pauselệnh chờ đợi để bạn có thể xem lại kết quả. Nếu bạn lấy pausera, cửa sổ quản trị sẽ đóng và bạn không biết lệnh có hoạt động hay không. Các ERRORLEVELlệnh từ được trả lại là tốt.


2

Điều này hoạt động cho Windows 10, chưa được thử nghiệm với các phiên bản Windows khác.

Một ví dụ để mở notepad với quyền quản trị viên từ cmd.exe, khởi động powershell yêu cầu quyền nâng cao.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Điều này sẽ cung cấp cho bạn hộp thoại UAC (nếu được bật) với [Có] [Không] hoặc sẽ hỏi bạn mật khẩu quản trị viên.

Một ví dụ khác để mở tệp máy chủ bằng notepad sẽ là:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Thêm thông tin: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.man Quản lý / start-process? View = powershell-6


Các đối số để thực thi phải là một -ArgumentListtham số, không chỉ đơn giản là các tham số bổ sung cho quá trình bắt đầu.
Appleshell

0

Hãy xem Start ++ - nó có chức năng này cùng với rất nhiều thứ hữu ích khác. Để chạy với dấu nhắc UAC, chỉ cần sử dụng sudotên chương trình của bạn tại dòng lệnh như được hiển thị ở đây:

văn bản thay thế

Dưới đây là một số tính năng khác (bạn cũng có thể thêm tính năng của riêng bạn):

văn bản thay thế

văn bản thay thế


Có vẻ cũng tốt nhưng tôi đã sử dụng FARR có chức năng tương tự như Start ++ và hơn thế nữa (tất nhiên trừ sudo).
Lukas Cenovsky

2
Liên kết nói Chào mừng bạn đến với: brandontools.com. Trang web này được đỗ MIỄN PHÍ. Bạn muốn mua brandontools.com?
xmojmr

1
như @xmojmr nói, trang web đó đã chết. Nếu bạn biết một địa điểm mới (tôi đã không tìm thấy một địa điểm quá nhanh), bạn nên cập nhật liên kết trong câu trả lời.
Abel

-1

Bạn có thể thiết lập __COMPAT_LAYER=RunAsAdmin. Sau đó, các lệnh sẽ chạy trong một độ cao riêng biệt cmd.

Ví dụ .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Tất cả các tùy chọn Chế độ tương thích được liệt kê trong Bộ công cụ tương thích ứng dụng MS.


Tập tin lô này bị hỏng khủng khiếp. Bạn không thể sử dụng ;như một dấu phân cách bình luận. "Các tệp hàng loạt không nhận ra dấu chấm phẩy và thường sẽ gây ra thông báo lỗi về một lệnh xấu."
DavidPostill
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.