แบตช์ไฟล์ที่มีคำสั่งให้ทำงานในฐานะผู้ดูแลระบบและผู้ใช้มาตรฐาน


9

ฉันกำลังพยายามเขียนไฟล์แบตช์ที่ต้องการเรียกใช้คำสั่งบางอย่างโดยใช้บัญชีผู้ดูแลระบบภายใน (เริ่ม / หยุดบริการ) และคำสั่งบางอย่างโดยใช้ผู้ใช้ที่เข้าสู่ระบบ (คัดลอกไฟล์จากไดเรกทอรีผู้ใช้) และฉันพบปัญหา ฉันได้ลองคำสั่งต่อไปนี้แล้ว:

Runas พร้อมกับ / savecred

runas /user:(PC name)\(admin username) /savecred "net stop \"(service name)\""
runas /user:(PC name)\(admin username) /savecred "sc stop \"(service name)\""

เมื่อใช้/savecredฉันไม่ได้รับแจ้งให้ใส่รหัสผ่าน หน้าต่างพร้อมรับคำสั่งแทนจะกะพริบและหายไปชั่วครู่ ฉันไม่สามารถบอกได้ว่ามีอะไรอยู่ในหน้าต่างนี้ บริการไม่หยุด

Runas โดยไม่ต้อง / savecred

runas /user:(PC name)\(admin username) "net stop \"(service name)\""
runas /user:(PC name)\(admin username) "sc stop \"(service name)\""

คำสั่งเหล่านี้จะแจ้งให้ฉันใส่รหัสผ่าน แต่จะแสดงพฤติกรรมเช่นเดียวกับคำสั่งด้านบน - หน้าต่างพร้อมรับคำสั่งจะปรากฏขึ้นชั่วครู่และบริการไม่หยุดทำงาน

เป็นการดีที่ฉันต้องการบันทึกรหัสผ่านสำหรับเซสชันเนื่องจากฉันจะต้องเรียกใช้คำสั่งเพิ่มเติมพร้อมรายละเอียด

สิ่งนี้เป็นไปได้หรือไม่ถ้าฉันทำผิดฉันจะทำอย่างไร


เพิ่มคำสั่ง "หยุด" ในตอนท้ายเพื่อหยุดมันจากการปิด
มาร์ติ

ฉันมีการหยุดชั่วคราวที่ท้ายไฟล์แบตช์ของฉันแล้ว แต่คำสั่งกำลังเรียกใช้พรอมต์คำสั่งอื่น - ฉันไม่ทราบวิธีหยุดการหายไปนั้น
Stuart Leyland-Cole

พยายามที่จะส่งออกโดยตรงไปยังไฟล์และดูว่ามันพิมพ์อะไรไป: "runas / ผู้ใช้: (ชื่อ PC) (ชื่อผู้ดูแลระบบ)" net stop \ "(ชื่อบริการ) \" ">> log.txt"
Martin

ฉันต้องเรียกใช้คำสั่งด้วยตัวเลือก / savecred มิฉะนั้นพรอมต์สำหรับรหัสผ่านจะปรากฏในล็อกไฟล์ ถ้าฉันเรียกใช้runas /user:(PC name)\(username) /savecred "net stop \"(service name)\"" >> log.txtไม่มีอะไรส่งออกไปยังล็อกไฟล์
Stuart Leyland-Cole

ตรวจสอบร็อบแวนเดอร์หน้าชุดแก้จุดบกพร่องของ Woude: robvanderwoude.com/battech_debugging.php สิ่งสำคัญที่สุดคือดาวน์โหลด LOGBATCH.BAT และเรียกใช้งานเช่น: LOGBATCH.BAT yourbatch.bat any_parameters_your_batch_needsและมันจะสร้างไฟล์บันทึกที่มีคำสั่ง / การกระทำทุกอย่างที่ดำเนินการโดยแจ้งyourbatch.batให้เราทราบสิ่งที่คุณเห็น
JSanchez

คำตอบ:


12

คุณสามารถเพิ่มสิ่งต่อไปนี้ในสคริปต์ของคุณและมันจะบังคับให้เรียกใช้การยกระดับ ไม่จำเป็นต้องดาวน์โหลดอะไรเลย

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------

ทั้งหมดนี้จะถูกพิมพ์Requesting administrative privileges...ไปที่หน้าจอจนกว่าจะหมดเวลา
มัฟฟินชาย

@ ชายมัฟฟิน เพิ่มคำสั่งของคุณในตอนท้ายของแบตช์ไฟล์และมันจะรันมันหลังจากการยกระดับ
pelms

1
วิธีนี้ดีมาก มันไม่จำเป็นต้องพึ่งพาเพิ่มเติม (เช่น psexec)
วิลเลียม

เข้าสู่วงวนไม่สิ้นสุดกับสคริปต์นั้น ...
JackTheKnife

0

แบ่งแบทช์ไฟล์ของคุณเป็นสอง ส่วนที่คุณต้องการเรียกใช้ในฐานะ admincmd ไปที่ system32 ส่วนที่คุณต้องการเรียกใช้ใน cmd ปกติวางในโฟลเดอร์ปกติ & จากที่นี่เรียกไฟล์แบตช์ที่สองซึ่งมี system32 วิธีนี้ส่วนที่สองจะทำงานใน admincmd เสมอ ฉันลองแล้วมันใช้งานได้สำหรับฉัน


0

หากคุณไม่สนใจซอฟต์แวร์ของบุคคลที่สามคุณสามารถลองใช้เป็น runasspc ของรหัสผ่าน มันจะบันทึกรหัสผ่านของคุณเป็นไฟล์ที่เข้ารหัส ไม่จำเป็นต้องเปิดเผยรหัสผ่านในไฟล์แบตช์


0

คำสั่ง "Runas" จะไม่ "sudo" คำสั่งของคุณ

ในการทำเช่นนี้จากไฟล์แบตช์คุณต้อง "ยกระดับ" คำสั่งที่คุณกำลังวางไข่ ดาวน์โหลดสคริปต์ Elevate Powertoy

http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx

เปิดใช้คำสั่งของคุณเป็น:

runas /user:(PC name)\(admin username) /savecred "elevate.cmd net stop \"(service name)\""

หรือ

runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""

ฉันได้พยายามต่อไป 3 คำสั่ง: runas /user:$PcName\$Username /savecred "elevate.cmd sc stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop $ServiceName"และแต่ละของพวกเขากลับข้อผิดพลาดนี้: runas ข้อผิดพลาด: ไม่สามารถรัน - หยุดสุทธิ elevate.cmd alfrescoTomcat -2147467259: ไม่ระบุข้อผิดพลาด
สจ๊วร์เลย์โคล

ไฟล์แบตช์ 3 บรรทัดที่จะเรียกใช้คำสั่งยกระดับ: github.com/kasajian/pseudo
zumalifeguard

0

สิ่งที่ฉันใช้คือรหัสต่อไปนี้:

::#################################################################################################################################
:: Elevate this script                                                                                                            #
::#################################################################################################################################

(
    :: Check Admin rights and create VBS Script to elevate
    >nul fsutil 2>&1 || (

        :: Very little red console
        mode con cols=80 lines=3 
        color cf

        :: Message
        title Please wait...
        echo.
        echo                         Requesting elevated shell...

        :: Create VBS script
        echo Set UAC = CreateObject^("Shell.Application"^)>"%TEMP%\elevate.vbs"
        echo UAC.ShellExecute "%~f0", "%TEMP%\elevate.vbs", "", "runas", 1 >>"%TEMP%\elevate.vbs"
        if exist "%TEMP%\elevate.vbs" start /b >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1
        exit /b
    )

    :: Delete elevation script if exist
    if exist "%~1" >nul del /f "%~1" 2>&1
)

pushd "%~dp0"

.... your code ....

popd

ใส่หลังจาก @ echo ปิดและพูด


0

คำตอบที่ง่ายขึ้น (เพิ่มเติมจากผู้ใช้ 225534) หากคุณต้องการเริ่มทำงานในบางไดเรกทอรีที่มีการเข้าถึงอย่างต่อเนื่อง:

@echo off

set MyWorkDir=D:\dev\

echo Requesting administrative privileges...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/C start /D %MyWorkDir% cmd", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"

0

รหัสนี้อนุญาตให้ cmd ถามรหัสผ่านผู้ใช้ ผู้ใช้จะต้องพิมพ์รหัสผ่านของพวกเขาแล้วexecutable.batจะทำงานในฐานะผู้ดูแลระบบ

main.bat

@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause

executable.bat

all code that runs as administrator

0

ฉันแบ่งรหัสออกเป็นสองส่วน

  • หนึ่งที่ต้องการสิทธิ์ผู้ดูแลระบบ

การเปลี่ยนชื่อไฟล์ปฏิบัติการที่ติดตั้งในไฟล์โปรแกรม

  • ส่วนอื่น ๆ ที่เริ่มต้นและฆ่ากล่าวว่าปฏิบัติการได้

เริ่มต้นมันยกระดับการแสดงผลโปรแกรมที่ไร้ประโยชน์เป็นสิ่งอื่น ๆ มันอาศัยไม่ได้ยกระดับ

สร้างทางลัดสำหรับไฟล์ bat ที่ต้องการการยกระดับและตรวจสอบ "run as administrator" ในคุณสมบัติ ใช้ทางลัดในไฟล์อื่น

ข้อเสีย

  • ทางลัดแต่ละอันจะเปิดหน้าต่าง cmd ใหม่
  • ฉันคิดว่าจำเป็นต้องทำงานพิเศษหากทั้งสองส่วนพึ่งพากัน

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

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