Пакет Script для запуска в качестве администратора - программирование

Пакет Script для запуска в качестве администратора

Я пишу программу проверки клиента/сервера, но она должна запускаться от имени администратора.

Я хочу, чтобы это выполнялось в моей сети и пользователях без вывода сообщений, и я не хочу, чтобы приглашение "Запуск от имени" Администратор ". Есть ли какой-нибудь начальный код, который я могу поместить в командный файл, чтобы он автоматически запускался от имени администратора?

4b9b3361

Ответ 1

Решения, которые не сработали

Нет: решение - создать ярлык [-> Совместимость → "запускать эту программу от имени администратора"] не работает.

Эта опция неактивна в Windows 7. Даже с отключенным UAC

Нет: команды runas/env/user:domain\Administrator <program.exe/command you want to execute> также недостаточно, поскольку она запрашивает у пользователя пароль администратора.

Решение, которое сработало

Да: Отключить UAC → Создать задание с помощью планировщика задач, это сработало для меня.

  • Создайте задание в планировщике задач и запустите его как пользователь с правами администратора.
  • Явно пометьте: "Запуск с наивысшими привилегиями"
  • Отключите UAC, чтобы не было подсказки для запуска этой задачи

Вы можете позволить сценарию включить UAC впоследствии, отредактировав реестр, если хотите. В моем случае этот сценарий запускается только один раз при создании виртуальной машины Windows, в которой UAC отключен в образе.

Все еще ожидая наилучшего подхода к запуску скрипта от имени администратора без особых хлопот.

Ответ 2

@echo off

 call :isAdmin

 if %errorlevel% == 0 (
    goto :run
 ) else (
    echo Requesting administrative privileges...
    goto :UACPrompt
 )

 exit /b

 :isAdmin
    fsutil dirty query %systemdrive% >nul
 exit /b

 :run
  <YOUR BATCH SCRIPT HERE>
 exit /b

 :UACPrompt
   echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
   echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"

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

Ответ 3

его возможный синтаксис:

RUNAS [/profile] [/env] [/netonly] /user:user Program

Key :
/profile Option to load the user profile (registry)
/env Use current environment instead of user's.
/netonly Use the credentials specified only for remote connections.
/user Username in form [email protected] or DOMAIN\USER
([email protected] is not compatible with /netonly)
Program The command to execute

пример:

runas /env /user:domain\Administrator <program.exe/command you want to execute>

Ответ 4

Ниже приведено описание:

  • Создать ярлык файла .bat
  • Откройте свойства ярлыка. На вкладке ярлыка выберите расширенный.
  • Отметьте "Запуск от имени администратора"

Запуск ярлыка выполнит вашу партию script в качестве администратора.

Ответ 5

У вас есть несколько вариантов.

Ответ 6

Создайте ярлык и установите ярлык для запуска всегда как администратор.

How-To Geek forum Сделать командный файл для запуска cmd как администратора:

Сделайте командный файл в редакторе и nameit.bat, затем создайте ярлык для него. Nameit.bat - ярлык. затем щелкните правой кнопкой мыши на Nameit.bat - ярлык → Свойства- > вкладка "Ярлык" → "Дополнительно" и выберите "Запуск от имени администратора". Выполните его из ярлыка.

Ответ 7

Пока я не нашел ни одного простого скрипта, вот мои два цента:

set ELEVATE_APP=Full command line without parameters for the app to run
set ELEVATE_PARMS=The actual parameters for the app
echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs
echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs
echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs
echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs
DEL elevatedapp.vbs

Ответ 8

Я сделал небольшую модификацию для Matt script, чтобы он запускался из одного script (просто добавьте это в начало любого script, требующего вызова UAC), но прочитайте ниже код для четного лучшее решение, которое я нашел в блоге:

:: ### START UAC SCRIPT ###

if "%2"=="firstrun" exit
cmd /c "%0" null firstrun

if "%1"=="skipuac" goto skipuacstart

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B

:gotPrivileges

setlocal & pushd .

cd /d %~dp0
cmd /c "%0" skipuac firstrun
cd /d %~dp0

:skipuacstart

if "%2"=="firstrun" exit

:: ### END UAC SCRIPT ###

:: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ###

Мое изменение использует два аргумента файла, как вы можете видеть, что не особенно изящно, но выполняет задание (и вы всегда можете спрятать их в хвосте, зарезервировав первые несколько аргументов, используя фиктивные заполнители). Кроме того, AFAIK Matt script не поддерживает пробелы в путях файлов, и это ограничение также относится к моей модификации этого script.

Эта проблема, похоже, присуща тому, как VBS обрабатывает эти пути, но на приведенной ниже ссылке есть еще лучшее решение на основе VBS для вызова UAC, которое выполняется из одного script без необходимости обходного пути, подобного этому, используя аргументы файла и, которые также поддерживают пробелы в пути к файлам:

http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/

script по этой ссылке делает несколько разные вызовы VBS, как вы заметите, что почему-то обходит проблему пробелами.

Ответ 10

Если все вышеприведенные ответы вам не по душе, вы можете использовать autoIT для запуска вашего файла (или того, что когда-либо) в качестве конкретного пользователя с их учетными данными.

Пример script, который будет запускать программу с использованием этих пользователей.

installAdmin()

Func installAdmin()
    ; Change the username and password to the appropriate values for your system.
    Local $sUserName = "xxxxx"
    Local $sPassword = "xxx"
    Local $sDirectory = "C:\ASD4VM\Download\"
    Local $sFiletoRun = "Inst_with_Privileges.bat"

    RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun)
EndFunc   ;==>Example

Здесь можно найти AutoIT. → Он использует формат .ua3, который скомпилирован в файл .exe, который можно запустить.

Ответ 11

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

echo createobject("shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs

если вы хотите запустить какое-либо приложение с правами администратора, вы просто напишите путь дыры для этого приложения, например, notepad++ в моих программных файлах, например:

echo createobject("shell.application").shellexecute "%programfiles%\Notepad++\notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs

Ответ 12

Мое решение, если вам не нужен файл.bat, это преобразовать пакетный файл в файл.exe, тогда вы сможете настроить запуск от имени администратора.

Ответ 13

Я просто добавил последние штрихи к этому. Я думаю, что это может быть самый короткий способ сделать это.

Это решение зависит от PowerShell, установленного на компьютере.

Основной поток - cmd.exe, запускается для запуска powershell.exe (это приводит к скрытию синего окна powershell), и, наконец, powershell выполняет команду для запуска текущего сценария с правами администратора.

Любой аргумент, который вы предоставляете скрипту, также будет переслан в перезапущенный скрипт.

@echo off

:CheckPermissions
    fltmc >nul 2>&1 || (
        echo Requesting administrative privileges...
        start cmd /c powershell.exe -Command "Start-Process cmd -Verb runas -ArgumentList '/c \"\"%~s0\"\" %*'"
        exit /B
    )

:Work
    echo Do some admin things here.
    pause

Вот более длинная версия для тестирования:

@echo off

:CheckPermissions
    fltmc >nul 2>&1 || (
        echo Requesting administrative privileges...
        start cmd /c powershell.exe -Command "Start-Process cmd -Verb runas -ArgumentList '/c \"\"%~s0\"\" %*'"
        exit /B
    )

:Test
    echo Script Path: "%~s0"
    echo Script Parameters (blank if you don't supply any): %*
    echo.

    fltmc >nul 2>&1 && (
        echo Admin powers activated!
    ) || (
        echo Need Admin!
    )
    echo.
    pause