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

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

runas /noprofile /user:Administrator SOME_COMMAND  

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

23
задан Hennes
10.04.2023 9:31 Количество просмотров материала 2977
Распечатать страницу

3 ответа

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

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

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

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

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

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

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

5
отвечен Ben N 2023-04-11 17:19

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

::#################################################################################################################################
:: 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 и замечаний.

1
отвечен FifthAxiom 2023-04-11 19:36

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

0
отвечен Rigel 2023-04-11 21:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх