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

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

Гибрид batch / WSH способен вызвать ShellExecute для отображения диалогового windows повышения 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.

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

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

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

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

Еще проще:

 C:> net user Administrator /active:yes 

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

 :: ------- 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 :: eg, run shell as admin cmd /k 

Для демонстрации: self-elevating.bat «путь с пробелами» arg2 3 4 «еще один длинный аргумент»

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

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

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

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

Хотя код @amr ali был отличным, у меня был экземпляр, в котором мой файл 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" :-------------------------------------- 

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

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

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

  • Значок батареи отсутствует на панели задач
  • Как я могу автоматически сохранять снимки экрана нажатием кнопки Prt Scr?
  • HTTP-запросы Windows Vista перестают работать
  • Редактор контекстного меню проводника Windows
  • Сделать Windows забыть пароль сетевого подключения?
  • Повышенные привилегии для запуска приложений в Windows?
  • WIndows Vista для обновления совместимости с драйверами устройств Windows 10
  • ПК в одной сети не могут связываться
  • Перемещение папки пользователей в Windows Vista на другой раздел - плохая идея?
  • Есть ли способ узнать, какая программа замедляет запуск?
  • Принудительное собственное разрешение монитора Non-PnP в Windows
  • Interesting Posts

    Перечисление в спящем режиме, сохраняющееся как перечисление

    JQuery getJSON заполняет выбор пункта меню

    Hibernate HQL Query: как установить коллекцию в качестве именованного параметра запроса?

    Как интернационализировать веб-приложение Java?

    Ограничить параметр шаблона C ++ для подclassа

    Завершение Bash для команд в Mac OS X

    Как устранить проблемы с оборудованием, связанные с зависанием компьютера / сбоем?

    Что такое опция -fPIE для независимых по позиции исполняемых файлов в gcc и ld?

    Как загрузить XML-файл с сервера и сохранить его на SD-карте?

    Необъяснимая систематическая пересылка спама (и поисковых систем) в Firefox / Chrome

    Почему в области уведомлений нет доступа к Интернету, когда нет связи с какой-либо сетью, либо Wired / Wireless

    React Native project, index.ios.js или index.android.js не сгенерирован

    Как преобразовать из int в String?

    Как определить обратные вызовы в Android?

    Как добавить команду «tree» в git-bash в Windows?

    Давайте будем гением компьютера.