คุณสามารถใช้สคริปต์ของฉัน Batch_Admin เพื่อยกระดับผู้ดูแลระบบโดยอัตโนมัติเพื่อใช้ในสคริปต์ประเภทแบทช์ใด ๆ หรือ BAT หรือ. CMD ฟังก์ชั่นนี้ช่วยให้มั่นใจว่าการทำงานบนสภาพแวดล้อมมาตรฐานพร้อมเครื่องมือมาตรฐานและในลักษณะเดียวกันในระบบ Windows ที่แตกต่างกัน มันใช้คำสั่งมาตรฐานและ Windows ในตัวหลายตัว อย่าใช้สคริปต์ภายนอกอื่น ๆ มันสามารถใช้ในการเรียกโปรแกรมใด ๆ ในฐานะผู้ดูแลระบบไม่เพียง แต่สคริปต์ชุด มันพอเพียงในการสร้างสคริปต์ขนาดเล็กซึ่งจากนั้นเรียกโปรแกรมที่ต้องใช้ Administartor ที่ได้รับอนุญาต วางสิ่งนี้ลงในโฟลเดอร์ PATH การค้นหา (จาก% PATH%)
หากต้องการใช้งานคุณเพียงแค่แทรกบรรทัดต่อไปนี้ (ตรงตาม) ลงในสคริปต์แบทช์หลักซึ่งจะเรียกใช้ในฐานะผู้ดูแลระบบ สิ่งนี้ทำได้ดีที่สุดที่ด้านบนสุดของสคริปต์หลักของเราและเป็นสิ่งที่ดีที่สุดก่อนซึ่งจะถูกเรียกผ่านทาง CALL เพิ่มเติมสคริปต์ย่อยบางส่วน (ดูคำอธิบายโดยละเอียดด้านล่าง)
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
สิ่งนี้สามารถแทรกในสคริปต์ลูกใด ๆ ที่เรียกว่าโดยไวยากรณ์โทร ในการแสดงข้อความในขณะที่ยังไม่มีสิทธิ์ของผู้ดูแลระบบเช่น 5 วินาทีก่อนที่จะโทร Batch_Admin ตั้งค่าตัวแปร "ShowAdminInfo" ตามจำนวนวินาที
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
ดังนั้นมันทำงานอย่างไร:
•โทร UAC.ShellExecute ผ่าน VBScript เพื่อรับสิทธิ์ผู้ใช้
•แบตช์รันสคริปต์หรือ BAT หรือ CMD
•ผู้เรียกสคริปต์สามารถมีช่องว่างชื่อยาวรวมอยู่ในการโทรในคำพูด
•คืนค่าพารามิเตอร์ทั้งหมดเรียกสคริปต์หลักที่ส่งผ่านจากบรรทัดคำสั่งราวกับว่าไม่มีการส่งการโทรและเริ่มบางอย่างตั้งแต่เริ่มต้นพร้อมด้วยอักขระพิเศษเช่นเครื่องหมายอัศเจรีย์ (!) และเปอร์เซ็นต์ (%) และยัง ด้วยวงเล็บ ()
•เก็บตำแหน่งสคริปต์หลักหากมีการโทรเกิดขึ้นในไดเรกทอรีที่สคริปต์นี้เป็นต้นแบบ
• Auxiliary แสดงข้อความถ้าเราตั้งค่าตัวแปร "ShowAdminInfo" เช่น เป็นเวลา 5 วินาทีซึ่งสามารถป้องกันการส่งผ่านสิทธิ์ของผู้ดูแลระบบโดยทันทีเพื่อให้ข้อมูลเพิ่มเติมและความเป็นไปได้ในการตัดสินใจ ตัวอย่างการตั้งค่าที่ต้องตั้งค่า: SET ShowAdminInfo = 5 โดยค่าเริ่มต้นเนื่องจากไม่ได้กำหนดตัวแปรนี้จึงไม่แสดง
•สคริปต์กำลังเรียกใช้ในเส้นทางการค้นหาของระบบ% PATH% และจากทรัพยากรเครือข่ายเช่น: \ Computer \ share \ test.bat
•ป้องกันความเข้าใจผิดในการเขียนไฟล์เสริมที่จำเป็นเมื่อสคริปต์เรียก Batch_Admin หลายตัวในเวลาเดียวกัน มันใช้หมายเลขสุ่มตั้งแต่ 1 ถึง 100
• แต่วิธีที่ดีที่สุดคือใช้กับสคริปต์หลัก การเปลี่ยนไปใช้สิทธิ์ผู้ดูแลระบบมักต้องการให้คุณเรียกใช้สคริปต์อีกครั้งอย่างสมบูรณ์ในหน้าต่างใหม่ในสภาพแวดล้อมใหม่โดยไม่ต้องขอความช่วยเหลือจากตัวแปรถูกตั้งค่าไว้ก่อนหน้านี้ในสคริปต์และค่าตัวแปรเหล่านี้ของเรา . เพียงแค่สคริปต์จะถูกดำเนินการอีกครั้ง
ด้านล่างเป็นสคริปต์แบบสมบูรณ์ Batch_Admin ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้อยู่ในเว็บไซต์ของฉัน
คัดลอกข้อความต่อไปนี้ลงในแผ่นจดบันทึกและบันทึกลงในดิสก์เป็น: Batch_Admin.bat
@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)
:: A D M I N I S T R A T O R - Automatically get admin rights for script batch. Paste this on top: net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
:: Also keep Batch directory localisation and then set variable: PATH_BAT
:: if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
:: Elaboration: Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion
SET "Localy="
if exist "%~1" SET "Localy=YES"
if exist "%~1.BAT" SET "Localy=YES"
if exist "%~1.CMD" SET "Localy=YES"
if defined Localy FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"
SET P1=%~1
SET Parameters=%*
SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
SET Parameters=!Parameters:%P1%=!
SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
SET Parameters=%Parameters:~3%
net session >nul 2>nul&if not errorlevel 1 goto Administrator_OK
if not defined ShowAdminInfo goto skip_message_Administrator
echo.
echo Script: %~1
echo.
echo *****************************************************************
echo *** R U N N I N G A S A D M I N I S T R A T O R ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo shortcut ^> Advanced ^> Running as Administrator
echo.
echo Alternatively run once "As Administrator"
echo or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch %ShowAdminInfo% seconds ...
TIMEOUT /T %ShowAdminInfo% > nul
:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1
SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat" SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo @SET "PATH_BAT=%PATH_BAT%" > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B
:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R - Automatically get admin rights (The End) ***