Пакетный файл с командами для запуска от имени администратора и обычного пользователя


9

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

Руны с / savecred

runas /user:(PC name)\(admin username) /savecred "net stop \"(service name)\""
runas /user:(PC name)\(admin username) /savecred "sc stop \"(service name)\""

При использовании /savecredмне не предлагается пароль. Вместо этого окно командной строки кратковременно вспыхивает и исчезает. Я не могу сказать, что находится в этом окне. Служба не остановлена.

Руны без / savecred

runas /user:(PC name)\(admin username) "net stop \"(service name)\""
runas /user:(PC name)\(admin username) "sc stop \"(service name)\""

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

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

Возможно ли это и если да, что я делаю не так?


добавить команду «пауза» в конце, чтобы остановить ее после закрытия
Martin

У меня уже есть пауза в конце моего командного файла, но команды запускают другую командную строку - я не знаю, как остановить это исчезновение.
Стюарт Лейланд-Коул

попробуйте направить вывод в файл и посмотреть, печатает ли он в нем что-нибудь: "runas / user: (имя ПК) (имя пользователя admin)" net stop \ "(имя службы) \" ">> log.txt"
Martin

Я должен выполнить команду с параметром / savecred, в противном случае запрос пароля появится в файле журнала. Если я запускаю runas /user:(PC name)\(username) /savecred "net stop \"(service name)\"" >> log.txtничего не выводится в файл журнала.
Стюарт Лейланд-Коул

Посетите страницу отладки Роба ван дер Вуде: robvanderwoude.com/battech_debugging.php . Самое главное, скачайте LOGBATCH.BAT и запустите его так: LOGBATCH.BAT yourbatch.bat any_parameters_your_batch_needsон создаст файл журнала, содержащий все команды / действия, выполненные командой yourbatch.batДайте нам знать, что вы там видите.
Санчес

Ответы:


12

Вы можете добавить следующее в ваш скрипт, и он заставит его работать с повышенными правами. Не нужно ничего скачивать.

:: BatchGotAdmin
:-------------------------------------
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"
:--------------------------------------

Все, что это делает, это печатать Requesting administrative privileges...на экран до истечения времени ожидания.
The Muffin Man

@ Маффин Человек. Добавьте свои команды в конец командного файла, и он выполнит их после повышения прав.
Пельмс

1
этот метод отлично. он не требует дополнительных зависимостей (например, psexec).
Уильям

С этим сценарием мы
попали

0

разделите ваш пакетный файл на две части. Часть, которую вы хотите запустить как admincmd вставить в system32. Часть, которую вы хотите запустить в обычном cmd, вставьте ее в обычную папку, и отсюда вызовите второй пакетный файл, который там есть system32. Таким образом, вторая часть всегда запускается в admincmd. Я попробовал это, и это работает для меня.


0

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


0

Команда "Runas" не будет "sudo" вашей командой.

Чтобы сделать это из командного файла, вам нужно «поднять» команды, которые вы порождаете. Загрузите скрипты Elevate Powertoy.

http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx

Запустите ваши команды как:

runas /user:(PC name)\(admin username) /savecred "elevate.cmd net stop \"(service name)\""

или

runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""

Я попытался следующие 3 команды: runas /user:$PcName\$Username /savecred "elevate.cmd sc stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop \"$ServiceName\"", runas /user:$PcName\$Username /savecred "elevate.cmd net stop $ServiceName"и каждый из них возвращает эту ошибку: RUNAS ОШИБКА: Невозможно запустить - elevate.cmd чистая остановка alfrescoTomcat -2147467259: Неизвестная ошибка
Стюарт Leyland-Коула

3-х строчный командный файл, который будет запускать команду с повышенными
правами

0

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

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

(
    :: Check Admin rights and create VBS Script to elevate
    >nul fsutil 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 >nul cscript /nologo "%TEMP%\elevate.vbs" 2>&1
        exit /b
    )

    :: Delete elevation script if exist
    if exist "%~1" >nul del /f "%~1" 2>&1
)

pushd "%~dp0"

.... your code ....

popd

Поместите его после выключения @echo и замечаний.


0

Упрощенный ответ (дополнение к user325534), если вам нужно только начать работать в каком-то каталоге с расширенным доступом:

@echo off

set MyWorkDir=D:\dev\

echo Requesting administrative privileges...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd", "/C start /D %MyWorkDir% cmd", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"

0

Этот код позволяет cmd запрашивать пароль пользователя. Пользователь должен ввести свой пароль, а затем executable.batон будет запущен от имени администратора

main.bat

@echo off
color 1f
Title Main
Goto start
:Start
runas /user:%username% executable.bat
pause

executable.bat

all code that runs as administrator
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.