วิธีเรียกใช้โปรแกรมจากบรรทัดคำสั่งด้วยสิทธิ์ที่ยกระดับ


44

มีวิธีการเรียกใช้โปรแกรมหรือคำสั่งที่มีสิทธิ์ยกระดับเมื่อฉันอยู่ในบรรทัดคำสั่งที่ไม่ยกระดับแล้วหรือไม่?

ว่าการดำเนินการเช่นเดียวกับที่จะดำเนินการเมื่อฉันคลิกที่ทางลัดโปรแกรมและเลือกเรียกใช้ในฐานะผู้ดูแลระบบ

runasคำสั่งอาจจะไม่แก้ปัญหา - ขอรหัสผ่าน แต่ฉันเพียงต้องการUACโต้ตอบ

คำตอบ:


14

ดูเหมือนว่ายูทิลิตีนี้ - การเริ่มต้นที่ซ่อน - จะทำสิ่งที่คุณต้องการหากคุณใช้สวิตช์ / uac นี่คือตัวอย่างบรรทัดคำสั่ง:

hstart /UAC "notepad.exe"

สิ่งนี้จะปรากฏขึ้นในกล่องโต้ตอบ UAC แทนที่จะถามรหัสผ่านเหมือนกับที่ runas ทำ

ป้อนคำอธิบายรูปภาพที่นี่


2
คำเตือน: ยูทิลิตี้ตัวนั้นคือ 20 $ สำหรับผู้ที่มีกระเป๋าเล็ก ๆ ให้ใช้ RunAdmin แทน :)
WeGoToMars

สิ่งนี้ไม่ได้เกิดขึ้นใน Windows 10
จะ

50

มีวิธีการทำเช่นนี้ใน PowerShell:

PS> Start-Process powershell -Verb runAs

19
ดูเหมือนว่าจะทำงานได้ดี จากบรรทัดคำสั่งคุณสามารถทำเช่นpowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze

7
ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้อง / ดีที่สุด IMO - ทำงานได้โดยไม่มียูทิลิตี้ของบุคคลที่สาม
crimbo

5
อาคารออกจาก @marsze - FWIW, ข้อโต้แย้งpowershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs"ในกรณีที่ง่ายที่สุดไปเป็นค่าเดียวของตัวเองยกตัวอย่างเช่น ขอบคุณ!
ruffin

ฉันจะไพพ์เอาต์พุตของพรอมต์คำสั่งที่ยกระดับลงในสคริปต์ที่กำลังเรียกใช้ในปัจจุบันของฉันได้อย่างไร
wheeler

@ wheeler ฉันเกือบจะแน่ใจว่าคุณไม่สามารถทำได้ แต่คุณสามารถส่งคืนรหัสทางออกได้:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam

6

จากคำตอบของRustamคุณสามารถ:

  • สร้างsu.batไฟล์แบตช์ที่ไหนสักแห่งใน% PATH เริ่มต้นของคุณโดยใช้หนึ่งซับต่อไปนี้:@powershell start -verb runas %*
  • เพิ่มฟังก์ชั่นนี้ในโปรไฟล์ PowerShell $ของคุณ:function su {start -verb runas @args}

ตอนนี้คุณสามารถออกsu <command> [parameters]ในเปลือกทั้งสอง!


2

RunAdminเป็นยูทิลิตี้ขนาดเล็ก (150Kb) ที่ให้คุณเรียกใช้โปรแกรมจากบรรทัดคำสั่งด้วยสิทธิ์ยกระดับ (มันจะแสดง UAC) ตรงข้ามกับ Hidden Start นั้นฟรี


2

งานนี้สำหรับฉันในแพลตฟอร์มทั้งหมดรวมทั้งความต้องการของ Windows 10. ฉันมีความเรียบง่ายบางทีคุณอาจจะปรับตัวเข้ากับวิธีการที่ถ้าคุณต้องการพลังงาน

ฉันมาพร้อมกับสคริปต์ขนาดเล็กชื่อsudo.cmdตั้งชื่อสำหรับคำสั่ง sudo Linux มันทำงานได้ดีพอที่จะคิด ฉันได้ระบุข้อกำหนดขั้นตอนในการติดตามและสคริปต์อยู่ใกล้กับด้านล่างพร้อมตัวอย่าง ก่อนคำเตือน

คำเตือน : คำสั่งทำงานในไดเรกทอรีระบบ windows โดยค่าเริ่มต้น คุณจะต้องcdปลอดภัยที่ไหนสักแห่งก่อน

ข้อกำหนด :

  • เรียกใช้คำสั่งกับผู้ดูแลระบบด้วยสิทธิพิเศษจาก windows .CMD
    หรือ cmd-shell
  • ต้องมีการตรวจสอบสิทธิ์ของ Windows ตามปกติเกี่ยวกับคำสั่ง
    • กล่าวอีกนัยหนึ่งคำสั่งจะไม่ทำงานหากฉันไม่ได้ลงชื่อเข้าใช้ด้วยบัญชีพิเศษ
  • ดำเนินการคำสั่งด้วยสิทธิ์ผู้ดูแลระบบและดำเนินการต่อเมื่อถูกเรียกใช้ภายในสคริปต์ ดังนั้นรอให้คำสั่งดำเนินการให้เสร็จสิ้น
  • เป็นคนเรียบง่ายดังนั้นมันจะทำงานเสมอ
  • ไม่จำเป็นต้องใส่รหัสผ่านทุกครั้งหากฉันลงชื่อเข้าใช้แล้ว
    • วิธีที่ดีกว่าคือถ้าฉันสามารถป้อนรหัสผ่านหนึ่งครั้งเช่นเดียวกับsudoคำสั่งจริงบน Linux

วิธีแก้ปัญหา :

  1. สร้างสคริปต์คำสั่งเพื่อเรียกใช้อาร์กิวเมนต์ทั้งหมดที่ส่งผ่าน sudo.cmd
  2. การสร้าง Windows sudo.lnkตัดสั้นไปที่ชื่อสคริปต์คำสั่งมัน
  3. ใส่ทางsudoลัดใน PATH หน้าต่างของคุณเพื่อให้สามารถมองเห็นได้
  4. แก้ไขคุณสมบัติทางลัดทำให้Start in:พา ธ ว่างเปล่า
  5. คลิกปุ่ม [ Advanced] - ตรวจสอบRun as Administrator
  6. เปิดใช้งานทางลัดในเส้นทางหน้าต่างของคุณใช้ตัวแปรสภาพแวดล้อม PATHEXT ได้แก่
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

เมื่อคุณพิมพ์sudo dirบนบรรทัดคำสั่ง Windows จะแสดง

User Account Control

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

  [YES]  [NO]

ป๊อปอัพการควบคุมการเข้าถึง หากคุณคลิก "[ NO]" จะไม่มีอะไรเกิดขึ้น Windows จะแสดงAccess is denied.ข้อความ ""

เมื่อคุณคลิก "[ YES]" คำสั่ง directory จะทำงานด้วยสิทธิ์ยกระดับ แน่นอนว่าคุณอาจต้องการสิ่งที่น่าสนใจยิ่งขึ้นเช่นการหยุดหรือสอบถามเกี่ยวกับบริการ:

 sudo sc query SDRSVC

SDRSVC เป็นชื่อบริการสำหรับ "บริการ Windows Backup" ซึ่งจะแสดงรายการต่อไปนี้ในหน้าต่าง Cmd แยกต่างหาก:

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

sudo.cmdสคริปต์ตัวเองเป็นพื้นฐานมาก อย่างที่ฉันบอกว่าความต้องการของฉันเรียบง่าย ฉันต้องการหยุดและเริ่มบริการในขณะที่ฉันปรับใช้รหัสสำหรับการทดสอบ

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

pauseคำสั่งรอให้คุณทบทวนผล หากคุณนำpauseหน้าต่างการบริหารออกมาปิดลงและคุณไม่รู้ว่าคำสั่งนั้นใช้ได้หรือไม่ ERRORLEVELจากคำสั่งจะถูกส่งกลับเช่นกัน


2

สิ่งนี้ใช้ได้กับ Windows 10 ไม่ได้ทดสอบกับ Windows รุ่นอื่น

ตัวอย่างการเปิดแผ่นจดบันทึกที่มีสิทธิ์ของผู้ดูแลระบบจาก cmd.exe ซึ่งเริ่มทำงานกับ PowerShell ซึ่งจะขอสิทธิ์ยกระดับ

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

สิ่งนี้จะให้กล่องโต้ตอบ UAC ของคุณ (หากเปิดใช้งาน) ด้วย [ใช่] [ไม่ใช่] หรือจะขอรหัสผ่านผู้ดูแลระบบ

อีกตัวอย่างหนึ่งในการเปิดไฟล์โฮสต์ด้วย notepad คือ:

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

ข้อมูลเพิ่มเติม: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6


อาร์กิวเมนต์สำหรับ executable ควรเป็น-ArgumentListพารามิเตอร์ไม่ใช่เพียงแค่พารามิเตอร์เพิ่มเติมสำหรับการเริ่มต้นกระบวนการ
Appleshell

0

ลองดูที่Start ++ - ซึ่งมีฟังก์ชั่นนี้พร้อมกับสิ่งที่มีประโยชน์อื่น ๆ อีกมากมาย ในการรันด้วยพรอมต์ UAC เพียงใช้sudoชื่อโปรแกรมของคุณที่บรรทัดคำสั่งดังที่แสดงที่นี่:

ข้อความแสดงแทน

นี่คือคุณสมบัติอื่น ๆ (คุณสามารถเพิ่มของคุณเอง):

ข้อความแสดงแทน

ข้อความแสดงแทน


ดูดี แต่ฉันใช้ FARR ซึ่งมีฟังก์ชันการทำงานที่คล้ายกันเป็น Start ++ และอื่น ๆ (แน่นอนยกเว้น sudo)
Lukas Cenovsky

2
ลิงค์บอกว่ายินดีต้อนรับสู่: brandontools.com หน้าเว็บนี้จอดฟรี ต้องการซื้อ brandontools.com หรือไม่
xmojmr

1
ดังที่ @xmojmr พูดว่าไซต์นั้นตายแล้ว หากคุณทราบตำแหน่งใหม่ (ฉันไม่พบที่ตั้งที่รวดเร็ว) คุณควรอัปเดตลิงก์ในคำตอบ
Abel

-1

__COMPAT_LAYER=RunAsAdminคุณสามารถตั้งค่า cmdแล้วคำสั่งที่จะทำงานในการแยกสูง

ตัวอย่าง.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

ตัวเลือกโหมดความเข้ากันได้ทั้งหมดอยู่ในรายการใน MS Tool Compatibility Toolkit


ไฟล์แบทช์นี้เสียอย่างน่ากลัว คุณไม่สามารถใช้;เป็นตัวคั่นความคิดเห็น "แฟ้มแบทช์ไม่รู้จักเครื่องหมายอัฒภาคและโดยทั่วไปจะทำให้เกิดข้อความแสดงข้อผิดพลาดเกี่ยวกับคำสั่งที่ไม่ดี"
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.