วิธีการเขียนโค้ดไฟล์ BAT เพื่อให้ทำงานเป็นโหมดผู้ดูแลระบบเสมอ?


149

ฉันมีบรรทัดนี้ในไฟล์ BAT ของฉัน:

"Example1Server.exe"

ฉันต้องการดำเนินการในโหมดผู้ดูแลระบบ วิธีการแก้ไขรหัสค้างคาวเพื่อเรียกใช้ในฐานะผู้ดูแลระบบ

ถูกต้องหรือไม่ ฉันจำเป็นต้องใส่เครื่องหมายคำพูดหรือไม่?

runas /user:Administrator invis.vbs Example1Server.exe


คำตอบ:


71

คุณใช้runasเพื่อเปิดโปรแกรมเป็นผู้ใช้เฉพาะ:

runas /user:Administrator Example1Server.exe

6
@karikari: ชื่อเช่นนี้ ( Example1Server.exe) ไม่จำเป็นต้องใส่เครื่องหมายคำพูด แต่ในบางกรณี (เช่นช่องว่างในชื่อ:) Example1 Server.exeคุณจะต้องการมันแน่นอน คุณสามารถใช้เครื่องหมายคำพูดได้แม้ว่าจะไม่จำเป็นก็ตาม
Andriy M

18
บัญชีผู้ดูแลระบบอาจไม่มีชื่อว่า Administrator
Anders

9
@Anders: ไม่อาจไม่ได้; ฉันสมมติว่า OP สามารถ "สังเกตรูปแบบ" ได้ นี้ไม่ได้เป็นคำตอบ plz-ให้กับฉัน Teh-codez: -S โดยวิธีการที่ฉันควรเพิ่ม OP อาจต้องการบางคำสั่งที่ซับซ้อนมากขึ้นเช่นหรือrunas /User:abc "csript myscript.vbs" runas /User:abc "cmd /c start ..."
Kerrek SB

16
ฉันกลัวคำตอบนี้ไม่ใช่สิ่งที่ผู้เยี่ยมชม 90% ต้องการเพราะมันยากกว่าการคลิกขวา - เรียกใช้ในฐานะผู้ดูแลแม้ว่ามันจะถูกต้องทางเทคนิคก็ตาม ตรวจสอบคำตอบอื่น ๆ อีกครั้ง มันเป็นสิ่งที่คนส่วนใหญ่ต้องการ
j riv

13
ไม่คำตอบนี้ไม่ถูกต้องทางเทคนิค การทำงานในฐานะผู้ดูแลระบบไม่เหมือนกับการทำงานภายใต้ผู้ใช้ที่มีชื่อเป็นผู้ดูแลระบบและสิทธิ์ต่างกัน ดูคำตอบอื่น ๆ
Alexander Gelbukh

370

คำตอบอื่น ๆ ต้องการให้คุณป้อนรหัสผ่านบัญชีผู้ดูแลระบบ นอกจากนี้การทำงานภายใต้บัญชีในกลุ่มผู้ดูแลระบบนั้นไม่เหมือนกับการทำงานแบบผู้ดูแลระบบดู: UAC บน Wikipedia

คำแนะนำสำหรับ Windows 7

เพื่อให้ทำงานในฐานะผู้ดูแลระบบให้สร้างทางลัดสำหรับไฟล์แบตช์

  1. คลิกขวาที่ไฟล์แบตช์และคลิกคัดลอก
  2. นำทางไปยังตำแหน่งที่คุณต้องการทางลัด
  3. คลิกขวาที่พื้นหลังของไดเรกทอรี
  4. เลือกวางทางลัด

จากนั้นคุณสามารถตั้งค่าทางลัดให้ทำงานในฐานะผู้ดูแลระบบ:

  1. คลิกขวาที่ทางลัด
  2. เลือกคุณสมบัติ
  3. ในแท็บทางลัดคลิกขั้นสูง
  4. เลือกช่องทำเครื่องหมาย "Run as administrator"
  5. คลิกตกลงตกลง

ตอนนี้เมื่อคุณคลิกสองครั้งที่ทางลัดมันจะพร้อมท์ให้คุณยืนยัน UAC แล้วเรียกใช้ในฐานะผู้ดูแลระบบ (ซึ่งฉันได้กล่าวไว้ข้างต้นนั้นแตกต่างจากการทำงานภายใต้บัญชีในกลุ่มผู้ดูแลระบบ)

ตรวจสอบภาพหน้าจอด้านล่าง

ภาพหน้าจอ

หมายเหตุ: เมื่อคุณเรียกใช้ในฐานะผู้ดูแลระบบไดเรกทอรีปัจจุบัน (เส้นทาง) จะไม่เหมือนกับไฟล์ค้างคาว ซึ่งอาจทำให้เกิดปัญหาในหลาย ๆ กรณีที่ไฟล์ bat อ้างอิงถึงไฟล์ที่เกี่ยวข้องข้างๆ ตัวอย่างเช่นใน Windows 7 ของฉัน cur dir จะเป็น SYSTEM32 แทนที่จะเป็นตำแหน่งไฟล์แบ็ต! หากต้องการแก้ไขปัญหาคุณควรใช้

cd "%~dp0"

หรือดีกว่า

pushd "%~dp0"

เพื่อให้แน่ใจว่า cur dir อยู่ในเส้นทางเดียวกันกับที่ไฟล์ bat อยู่


8
อาที่ถูกซ่อนอยู่แน่นอน (ส่วนใหญ่เราไม่คิดว่าปุ่มขั้นสูงนั้นมีตัวเลือกนั้นอยู่) ฉันเกือบแน่ใจว่าใครก็ตามที่คิดคำตอบที่ซับซ้อนอื่น ๆ ไม่ทราบ นี่คือคำตอบที่ 90% + ของผู้เข้าชมจะต้องการ
j riv

1
ฉันเห็นด้วย. นี่ควรเป็นคำตอบ ฉันได้เพิ่มภาพหน้าจอเพื่อให้ง่ายต่อการค้นหาปุ่มล่วงหน้า
fedmich

1
สิ่งนี้ใช้กับ Windows Server 2012 R2 ด้วย
garec

3
สิ่งนี้ไม่ได้ผลสำหรับฉันบน Windows 10 หรือ Windows 7 เมื่อฉันพยายามเรียกใช้ในฐานะผู้ดูแลระบบโดยคลิกขวาที่ไฟล์ BAT และ "Run as Administrator" หรือใช้เทคนิคที่อธิบายไว้ที่นี่ไฟล์แบตช์จะเปิดขึ้นเป็นวินาที จากนั้นปิดทันทีโดยไม่มีคำสั่งหรือโปรแกรมในไฟล์แบตช์ที่ดำเนินการ ฉันได้ลองใช้งานไฟล์แบทช์ที่เรียบง่ายซึ่งสะท้อน "Hello World" และพวกเขาก็ล้มเหลวในลักษณะนี้ มันน่าผิดหวังมาก ฉันมีจนถึงตอนนี้ไม่สามารถหาทางออก
Jonathan Elkins

1
@JonathanElkins คุณลองเพิ่มหยุดชั่วคราวที่ท้ายไฟล์แบตช์หรือไม่?
Ed Greaves

32

เพียงเพิ่มส่วนนี้ลงบนไฟล์ค้างคาวของคุณ:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

มันจะยกระดับเป็นผู้ดูแลระบบและยังอยู่ในไดเรกทอรีที่ถูกต้อง ทดสอบบน Windows 10


1
ผ่านการทดสอบใน Windows 7 และใช้งานได้ดี แต่คุณสามารถอธิบายสิ่งที่มันทำ? ฉันไม่คุ้นเคยกับไฟล์ค้างคาว
Sunfloro

1
มันสร้างไฟล์ VBScript ด้วยรหัสที่ยกระดับให้คุณเป็นผู้ดูแลระบบ (ถ้าคุณยังไม่ได้) และเรียกใช้ไฟล์ค้างคาวอีกครั้งคราวนี้เป็นผู้ดูแลระบบ
ฝ่าบาท

1
สิ่งที่ฉันค้นหาอย่างแน่นอน! ไม่ต้องมีการเปลี่ยนแปลงเพิ่มเติมหรือต้องการไฟล์เพิ่มเติม!
MSS

1
getadmin.vbs คืออะไร
Kiquenet

4
การเพิ่มโค้ดสองบรรทัดลงในไฟล์แบตช์ที่มีอยู่เป็นทางออกที่ดีสำหรับฉัน ฉันต้องเพิ่มexitไปยังจุดสิ้นสุดของไฟล์แบตช์ของฉันไม่เช่นนั้นฉันก็จะถูกปล่อยให้พร้อม นี่อาจเป็นเพราะ. vbs เปิดใช้งานพรอมต์คำสั่งที่สอง
เบ็

10

หากคุณสามารถใช้ยูทิลิตีของบุคคลที่สามได้นี่คือelevateโปรแกรมอรรถประโยชน์บรรทัดคำสั่งอรรถประโยชน์บรรทัดคำสั่ง

นี่คือคำอธิบายการใช้งาน:

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog

elevate.exeหิน!
Sangbok Lee

8

คุณสามารถใช้คำสั่งยกระดับของnircmd.exe

การอ้างอิงคำสั่ง NirCmd - ยกระดับ

elevate [Program] {Command-Line Parameters}

สำหรับ Windows Vista / 7/2008 เท่านั้น: เรียกใช้โปรแกรมที่มีสิทธิ์ผู้ดูแลระบบ เมื่อ [โปรแกรม] มีอักขระเว้นวรรคหนึ่งตัวขึ้นไปคุณต้องใส่ไว้ในเครื่องหมายคำพูด

ตัวอย่าง:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS: ฉันใช้มันใน win 10 และใช้งานได้


6

แปลงไฟล์แบตช์ของคุณเป็น. exe ด้วยเครื่องมือนี้: http://www.battoexeconverter.com/จากนั้นคุณสามารถเรียกใช้ในฐานะผู้ดูแลระบบ


2
โปรดจำไว้ว่าแอนตี้ไวรัสจำนวนมากนั้นไวต่อไฟล์ exe ที่สร้างขึ้นมาด้วยวิธีนี้ "แบตช์แปลง / เข้ารหัส" ไฟล์แบทช์ด้วยวิธีนี้เป็นวิธีเก่าที่ใช้โดยโปรแกรมที่เป็นอันตราย
Hamy

หากคุณวิเคราะห์โดเมนนี้โดยใช้ Symantec - Threat Type: othermalware เหตุผลการคุกคาม: โดเมนรายงานและตรวจสอบว่าแสดงมัลแวร์ ระบุว่าเป็นโดเมนที่เป็นอันตรายหรือ URL
นิล

ข้อเสนอแนะไม่ดี!


6

ฉันคิดว่าฉันมีวิธีแก้ไขปัญหารหัสผ่าน อาร์กิวเมนต์เดียวนี้น่าอัศจรรย์อย่างแท้จริง มันถามรหัสผ่านหนึ่งครั้งและไม่เคยถามมันอีกเลย แม้ว่าคุณจะใส่ลงในโปรแกรมอื่น แต่จะไม่ขอรหัสผ่าน นี่มันคือ:

runas /user:Administrator /savecred Example1Server.exe


4
  1. การทดลองของฉันระบุว่าคำสั่งrunasต้องรวมโดเมนผู้ใช้ของผู้ดูแลระบบ (อย่างน้อยก็ในการตั้งค่าสภาพแวดล้อมขององค์กรของฉัน):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    หากคุณยังไม่ทราบโดเมนผู้ใช้ของผู้ดูแลระบบให้เรียกใช้อินสแตนซ์ของ Command Prompt ในฐานะผู้ใช้ที่เป็นผู้ดูแลระบบและป้อนคำสั่งต่อไปนี้:

    echo %userdomain%
    
  2. คำตอบที่ได้รับจากKerrek SBและEd Greavesจะดำเนินการกับไฟล์เป้าหมายภายใต้ผู้ใช้ที่เป็นผู้ดูแลระบบ แต่หากไฟล์นั้นเป็นไฟล์ Command script (.bat file) หรือ VB script (ไฟล์. vbs) ซึ่งพยายามจะทำงานในการล็อกอินปกติ สภาพแวดล้อมของผู้ใช้ (เช่นการเปลี่ยนรายการรีจิสตรี) คุณอาจไม่ได้รับผลลัพธ์ที่ต้องการเนื่องจากสภาพแวดล้อมที่สคริปต์ทำงานจริงจะเป็นของผู้ดูแลระบบไม่ใช่ผู้ใช้ที่ลงชื่อเข้าใช้ปกติ! ตัวอย่างเช่นหากไฟล์เป็นสคริปต์ที่ทำงานบนกลุ่ม HKEY_CURRENT_USER ของรีจิสทรี "ผู้ใช้ปัจจุบัน" ที่ได้รับผลกระทบจะเป็นผู้ใช้ที่ไม่ใช่ผู้ใช้ปกติที่เข้าสู่ระบบ


0

ใช้ฟิสิคัลไดรฟ์ \ path ที่สมบูรณ์ไปยังไฟล์แบตช์เป้าหมายของคุณในคุณสมบัติทางลัด

สิ่งนี้ไม่ทำงานใน Windows 10 หากคุณใช้ไดรฟ์ย่อยเช่นที่ฉันพยายามทำในตอนแรก ...

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