Ви можете використовувати мій сценарій Batch_Admin, щоб автоматично підняти адміністратора для використання в будь-якому типі власного сценарію Batch, або BAT або .CMD. Ця функція забезпечує роботу в стандартному середовищі, зі стандартними інструментами і однаково в різних системах Windows. Він використовує кілька стандартних і вбудованих команд Windows. Не використовуйте жодних інших зовнішніх скриптів. Він може використовуватися для виклику будь-якої програми як адміністратор, а не лише сценарії Пакет. Досить створити невеликий сценарій, який потім викликає програму, яка вимагає дозволу Administartor. Розмістіть це в будь-якій папці PATH пошуку (від% PATH%).
Щоб використовувати його, ви просто вставите наступний рядок (точно так само) у його батьківський скрипт пакетного пакету, який потрібно запустити як адміністратор. Це найкраще робити у верхній частині нашого батьківського сценарію, і найкраще, щоб спочатку, які будуть викликані через CALL далі, деякі підкрипти (див. Докладне пояснення нижче).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Це може бути вставлено у будь-який дочірній сценарій, який викликається синтаксисом CALL. Для відображення повідомлення, поки воно все ще не має прав адміністратора, наприклад. за 5 секунд до виклику Batch_Admin встановіть змінну "ShowAdminInfo" на кількість секунд
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Отже, як це працює:
• Викликає UAC.ShellExecute через VBScript для отримання дозволів користувача
• Batch запускає скрипт, або BAT або CMD
• Абонент сценарію може містити довгі проміжки імен, включені до виклику в лапки
• Поверніть всі параметри виклику головного сценарію, переданого з командного рядка, як би не було передачі виклику, і почати щось з нуля, також із спеціальних символів, таких як знак оклику (!) Та відсоток (%), а також з дужками ()
• Утримує розташування головного сценарію, якщо виклик відбувся в каталозі, де цей скрипт є головним
• Допоміжне відображає повідомлення, якщо ми встановимо перед собою змінну "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) ***