Как вы запускаете команду как администратор из командной строки Windows? - PullRequest
55 голосов
/ 10 мая 2011

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

Ответы [ 8 ]

56 голосов
/ 19 августа 2013

Нажмите кнопку запуска. В поле поиска введите «cmd», затем нажмите Ctrl + Shift + Введите

56 голосов
/ 10 мая 2011

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

runas /user:Administrator "cmdName parameters"

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

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

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

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

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

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

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

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

C:> net user Administrator /active:yes
36 голосов
/ 11 мая 2011

Гибридный пакет / WSH может вызвать 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
10 голосов
/ 23 ноября 2014
:: ------- 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

Для демонстрации: self-elevating.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
2 голосов
/ 30 декабря 2014

Простой трюк с трубкой, ||, с некоторыми .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 temp.vbs, когда это будет сделано с его помощью.

2 голосов
/ 11 мая 2011

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

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

0 голосов
/ 10 мая 2011

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

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

...