2014-07-28 03:24:17 +0000 2014-07-28 03:24:17 +0000
50
50

Можно ли автоматически запускать пакетный файл от имени администратора

Мне интересно, можно ли автоматически открыть пакетный файл от имени администратора, когда вы дважды щелкните на пакетном файле, потому что команды должны выполняться с правами администратора.

Примечание: Я уже знаю о решении правой кнопкой мыши на файле и щелчком мыши на Run As Administrator, но это не автоматическое решение.

Ответы (9)

45
45
45
2014-07-28 03:43:30 +0000

Да, вы можете запустить пакетный файл с административными правами. К сожалению, вы не можете сделать это непосредственно из пакетного файла самостоятельно. Вам нужно сначала создать ярлык этого пакетного файла и изменить свойства этого ярлыка, чтобы это работало.

Для создания ярлыка существует множество способов, но самый простой и быстрый способ - это использование опции Отправить в в контекстном меню.

Right click batch file > Send to > Desktop (create shortcut)

Конечно, вы можете отправить ярлык туда, куда захотите. Чтобы поднять пакетный файл для запуска от имени администратора, выполните следующие шаги:

  1. Щелкните правой кнопкой мыши по только что созданному ярлыку (он должен быть на рабочем столе или куда бы вы его ни отправили)
  2. Во вкладке Shortcut нажмите кнопку Advanced…
  3. Установите флажок Run as administrator (Запустить от имени администратора) и нажмите OK как в модальном окне, так и в главном окне свойств.
  4. Запустите ярлык, дважды щелкнув по нему, и пакетный файл должен быть запущен от имени администратора.
33
33
33
2014-12-15 16:55:24 +0000

Как написано в ответ от Бена Грипки на другой вопрос:

REM --add the following to the top of your bat file--

@echo off

:: 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"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

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

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
5
5
5
2015-02-10 14:25:39 +0000

на Windows 7

  1. Создайте ярлык на этот пакетный файл

  2. Щелкните правой кнопкой мыши на файле

  3. Нажмите кнопку адаптации, чтобы найти флажок для запуска от имени администратора

Проверить снимок экрана ниже

.

4
4
4
2014-10-07 18:42:22 +0000

T

3
3
3
2015-05-31 14:49:17 +0000

Вы можете использовать мой скрипт Batch_Admin для автоматического повышения Администратора для использования в любом типе пакетного собственного скрипта, или BAT или .CMD. Эта функция обеспечивает работу в стандартном окружении, со стандартными инструментами и таким же образом в разных системах Windows. Она использует несколько стандартных и встроенных команд Windows. Не используйте другие внешние скрипты. Она может быть использована для вызова любой программы в качестве администратора, а не только скриптов Batch. Достаточно создать небольшой сценарий, который затем вызывает программу, требующую разрешения Администратора. Поместите его в любую поисковую папку PATH (от %PATH%).

Чтобы использовать его, просто вставьте следующую строку (точно такую же) в его родительский Batch скрипт, который должен быть запущен от имени Администратора. Это лучше всего сделать в верхней части нашего родительского скрипта, и лучше всего, чтобы сначала, который будет вызван через 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)***
1
1
1
2015-11-26 03:54:44 +0000
@echo off        
:: 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  
chkdsk

Это также работаетSOURCE: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file

1
1
1
2014-07-28 14:33:06 +0000

Или же вы можете создать второй пакетный файл, это может позволить вам запустить что угодно от имени администратора, при этом вводя пароль администратора только один раз. Пароль сохраняется в маркере аутентификации, и для его взлома требуется настоящий компьютер.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
0
0
0
2015-11-25 07:07:27 +0000

Это пример запуска летучей мыши от имени администратора. Это работает на меня.

Это идет так:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause
0
0
0
2015-11-11 09:50:46 +0000

Вы можете использовать утилиту командной строки elevate . (ссылка на скачивание - _COPY9_olclTwVGZLUklFMHNxQ00 )

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
```.

Похожие вопросы

3
28
13
7
2