Как выполнить команду от имени администратора из командной строки Windows?



У меня есть небольшой скрипт, который выполняет процесс сборки и установки на Windows для базар репозиторий я управляю. Я пытаюсь запустить скрипт с повышенными правами администратора от внутри оболочка Windows (cmd.ехе) - так же, как если бы я щелкнул правой кнопкой и выбрал Запуск от имени администратора, но без использования какого-либо метода, который требует использования графического интерфейса.

1110   8  

8 ответов:

пакета/выключатели гибрид может вызвать shellexecute, чтобы отобразить диалоговое окно повышения прав UAC...

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
    cscript //E:JScript //nologo "%~f0"
    @goto :EOF
)
echo.Performing admin tasks...
REM call foo.exe
@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",5);
@end

все, что вам нужно сделать, это использовать runas команда для запуска программы от имени администратора (с оговоркой).

runas /user:Administrator "cmdName parameters"

в моем случае, это был

runas /user:Administator "cmd.exe /C %CD%\installer.cmd %CD%"

обратите внимание, что вы должны использовать кавычки, иначе команда runas сожрет параметр switch в cmd.

также обратите внимание, что административная оболочка (cmd.exe) запускается в C:\Windows\System32 папка. Это не то, что я хотел, но было достаточно легко пройти по текущему пути к моему установщику, и ссылаться на него, используя абсолютный путь.

внимание: включить учетную запись администратора

использование runas таким образом требует включения учетной записи администратора, которая не является стандартной для Windows 7 или Vista. Однако,здесь это отличный учебник о том, как включить его, тремя различными способами:

Я сам включил его, открыв Администрирование,Локальная Политика Безопасности, затем перейдя к местные Политики\Параметры Безопасности и меняем значение Учетные Записи: Статус Учетной Записи Администратора политика включена, что ни один из трех способов, показанных в ссылке.

еще более простой способ:

C:> net user Administrator /active:yes

Нажмите кнопку "Пуск". В поле поиска введите "cmd" и нажмите клавишу Ctrl+ Shift+введите

:: ------- Self-elevating.bat --------------------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
findstr "^:::" "%~sf0">temp.vbs
cscript //nologo temp.vbs & del temp.vbs & exit /b

::: Set objShell = CreateObject("Shell.Application")
::: Set objWshShell = WScript.CreateObject("WScript.Shell")
::: Set objWshProcessEnv = objWshShell.Environment("PROCESS")
::: strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
::: objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
:admin -------------------------------------------------------------

@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments   : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k

для демонстрации: самоподъемный.bat "путь с пробелами" arg2 3 4 "Еще один длинный аргумент"

и это еще одна версия, которая не требует создания временного файла.

<!-- : --- Self-Elevating Batch Script ---------------------------
@whoami /groups | find "S-1-16-12288" > nul && goto :admin
set "ELEVATE_CMDLINE=cd /d "%~dp0" & call "%~f0" %*"
cscript //nologo "%~f0?.wsf" //job:Elevate & exit /b

-->
<job id="Elevate"><script language="VBScript">
  Set objShell = CreateObject("Shell.Application")
  Set objWshShell = WScript.CreateObject("WScript.Shell")
  Set objWshProcessEnv = objWshShell.Environment("PROCESS")
  strCommandLine = Trim(objWshProcessEnv("ELEVATE_CMDLINE"))
  objShell.ShellExecute "cmd", "/c " & strCommandLine, "", "runas"
</script></job>
:admin -----------------------------------------------------------

@echo off
echo Running as elevated user.
echo Script file : %~f0
echo Arguments   : %*
echo Working dir : %cd%
echo.
:: administrator commands here
:: e.g., run shell as admin
cmd /k

Я бы настроил ярлык, либо на CMD, либо на то, что вы хотите запустить, а затем установил свойства ярлыка для require admin, а затем запустил ярлык из вашего пакетного файла. Я не проверял, чтобы подтвердить, что он будет уважать свойства, но я думаю, что это более элегантно и не требует активации учетной записи администратора.

кроме того, если вы делаете это как запланированную задачу (которую можно настроить из кода), есть возможность запустить ее с повышенными правами.

хотя @АМР Али!--5--> код был велик, у меня был экземпляр, где мой файл bat содержал >< знаки, и он почему-то захлебнулся ими.

Я нашел это. Просто поместите все это перед вашим кодом, и он отлично работает.

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"
:--------------------------------------

простой трюк трубы,||, С некоторых .vbs используется в верхней части вашей партии. Он выйдет из обычного и перезапустится как администратор.

@AT>NUL||echo set shell=CreateObject("Shell.Application"):shell.ShellExecute "%~dpnx0",,"%CD%", "runas", 1:set shell=nothing>%~n0.vbs&start %~n0.vbs /realtime& timeout 1 /NOBREAK>nul& del /Q %~n0.vbs&cls&exit

кроме del /Q темп.vbs, когда это делается с его помощью.

обзор C:\windows\System32 и щелкните правой кнопкой мыши на cmd.exe и запуск от имени администратора. Работал для меня на Windows 7.

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

Comments

    Ничего не найдено.