5

Я пишу командный файл, который я буду распространять среди пользователей. Мне нужно выполнить несколько команд с повышенными разрешениями. Моим первоначальным решением было использовать:

runas /noprofile /user:Administrator SOME_COMMAND  

Однако на многих машинах (включая мою) скрытая учетная запись администратора неактивна, поэтому пароль администратора не настроен. Я также не могу указать другое имя пользователя, так как разные машины будут иметь разных пользователей. Есть ли способ реплицировать действие «щелкните правой кнопкой мыши -> Запуск от имени администратора» через командный файл? Я не против всплывающей подсказки, я просто не хочу, чтобы пользователь явно щелкнул правой кнопкой мыши и запустился с правами администратора.

3 ответа3

5

Вы можете воспользоваться PowerShell, который присутствует в каждой современной системе Windows.

Разделите команды, для которых требуется повышение прав, в отдельный пакетный файл, например, elevated.bat . Затем, когда пришло время их запускать, используйте это из своего не повышенного уровня сценария:

powershell -command "Start-Process elevated.bat -Verb runas"

Часть -Verb runas - это то, что вызывает запрос на повышение прав . Если исходный пакетный файл уже запущен с правами администратора или если запросы UAC отключены, новый файл будет повышен без запроса.

Обратите внимание, что текущий каталог повышенного пакетного процессора будет System32 . Если это проблема, вы можете использовать эту альтернативную версию, чтобы она начиналась в том же каталоге, что и сценарий без повышенных прав:

powershell -command "Start-Process cmd -ArgumentList '/c %CD% && elevated.bat' -Verb runas"

Это приводит к тому , новому экземпляру cmd в первый cd - диск в каталог , предоставленном% CD переменного в unelevated строки %CD% а затем выполнить нужный командный файл.

1

Я использую следующий код:

::#################################################################################################################################
:: Elevate this script                                                                                                            #
::#################################################################################################################################

(
    :: Check Admin rights and create VBS Script to elevate
    >nul fsutil dirty query %SYSTEMDRIVE% 2>&1 || (

        :: Very little red console
        mode con cols=80 lines=3 
        color cf

        :: Message
        title Please wait...
        echo.
        echo                         Requesting elevated shell...

        :: Create VBS script
        echo Set UAC = CreateObject^("Shell.Application"^)>"%TEMP%\elevate.vbs"
        echo UAC.ShellExecute "%~f0", "%TEMP%\elevate.vbs", "", "runas", 1 >>"%TEMP%\elevate.vbs"
        if exist "%TEMP%\elevate.vbs" start /b /wait >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1

        :: Delete elevation script if exist
        if exist "%TEMP%\elevate.vbs" >nul del /f "%TEMP%\elevate.vbs" 2>&1

        exit /b
    )    
)

pushd "%~dp0"

.... your code ....

popd

Поместите это после своего @echo off и замечаний.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .