Вы можете использовать мой скрипт 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 для получения пользовательских разрешений.
• Пакетный запуск скрипта, или 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) ***