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


9

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

runas з / збережений

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

Під час використання /savecredмене не запросять пароль. Натомість вікно командного рядка ненадовго миготить і зникає. Я не в змозі сказати, що в цьому вікні. Служба не припиняється.

руни без / збережені

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

Ці команди запрошують мене ввести пароль, але потім демонструють таку ж поведінку, як і вищезгадані команди - вікно командного рядка ненадовго спливає, і сервіс не припиняється.

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

Чи можливо це, і якщо так, то що я роблю неправильно?


додайте команду "пауза" наприкінці, щоб зупинити її закриття
Мартін

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

спробуйте направити вихід у файл і побачити, чи друкує він щось: "runas / user: (ім'я ПК) (ім'я користувача адміністратора)" 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Дайте нам знати, що ви там бачите.
JSanchez

Відповіді:


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

@Людина-кекс. Додайте команди в кінці пакетного файлу, і він буде виконувати їх після піднесення.
pelms

1
цей метод відмінний. він не потребує додаткових залежностей (наприклад, psexec).
Вільям

Потрапив у нескінченний цикл із цим сценарієм ...
JackTheKnife

0

розділіть свій пакетний файл на два. Частину, яку потрібно запустити як адмініструвальну пасту для system32d. Частину, яку потрібно запустити у звичайному cmd, вставити її у звичайну папку, а звідти виклик другого пакетного файлу, який є system32. Таким чином, друга частина завжди працює в admincmd. Я спробував це, і це працює на мене.


0

Якщо ви не заперечуєте проти програмного забезпечення сторонніх розробників, можете спробувати запустити як пароль runasspc. Це збереже ваш пароль у зашифрованому файлі. Пароль не потрібно виставляти у пакетному файлі.


0

Команда "Рунас" не "судо" вашу команду.

Для цього з пакетного файлу потрібно "підняти" команди, які ви нерестуєте. Завантажте сценарії 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-Коула


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

0

Я розділив свій код на дві частини

  • той, для якого потрібні права адміністратора.

перейменування виконуваного файлу, встановленого в програмних файлах

  • інша частина, яка розпочала і вбила вказаний виконуваний файл.

запускаючи його підвищеним, програма робила марну, оскільки інші речі, на які вона спиралася, не були підвищеними

зробив ярлик для файлу bat, який потребував висоти, і перевірив "запустити як адміністратор" у його властивостях. використано ярлик в іншому файлі.

КОНС

  • кожен ярлик відкриває нове вікно cmd
  • Я припускаю, що потрібна додаткова робота, якщо обидві частини залежать одна від одної

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.