Batch-Datei mit Befehlen, die als Administrator und Standardbenutzer ausgeführt werden sollen

8

Ich versuche, eine Batchdatei zu schreiben, die einige Befehle mit einem lokalen Administratorkonto (Starten / Beenden eines Dienstes) und einige Befehle mit dem angemeldeten Benutzer (Kopieren von Dateien aus dem Benutzerverzeichnis) ausführen muss, und es treten Probleme auf. Ich habe die folgenden Befehle ausprobiert:

Runas mit / savecred

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

Bei der Verwendung /savecredwerde ich nicht zur Eingabe eines Passworts aufgefordert. Stattdessen blinkt kurz ein Eingabeaufforderungsfenster und verschwindet. Ich kann nicht sagen, was sich in diesem Fenster befindet. Der Dienst wird nicht gestoppt.

Runas ohne / savecred

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

Diese Befehle fordern mich zur Eingabe eines Kennworts auf, zeigen dann jedoch dasselbe Verhalten wie die oben genannten Befehle. Ein Eingabeaufforderungsfenster wird kurz angezeigt und der Dienst wird nicht gestoppt.

Idealerweise möchte ich das Passwort für die Sitzung speichern, da ich mehr Befehle mit den Details ausführen muss.

Ist das möglich und wenn ja, was mache ich falsch?

Stuart Leyland-Cole
quelle
Fügen Sie am Ende den Befehl "Pause" hinzu, um das Schließen zu stoppen
Martin
Ich habe bereits eine Pause am Ende meiner Batch-Datei, aber die Befehle starten eine weitere Eingabeaufforderung - ich weiß nicht, wie ich das Verschwinden stoppen kann.
Stuart Leyland-Cole
Versuchen Sie, die Ausgabe in eine Datei zu leiten, und prüfen Sie, ob etwas darauf gedruckt wird: "runas / user: (PC-Name) (Administrator-Benutzername)" net stop "(Dienstname)" >> log.txt "
Martin
Ich muss den Befehl mit der Option / savecred ausführen, andernfalls wird die Eingabeaufforderung für das Kennwort in der Protokolldatei angezeigt. Wenn ich starte, wird runas /user:(PC name)\(username) /savecred "net stop \"(service name)\"" >> log.txtnichts in die Protokolldatei ausgegeben.
Stuart Leyland-Cole
Schauen Sie sich die Batch-Debugging-Seite von Rob van der Woude an: robvanderwoude.com/battech_debugging.php . Laden Sie vor allem LOGBATCH.BAT herunter und führen Sie es als solches aus. Anschließend LOGBATCH.BAT yourbatch.bat any_parameters_your_batch_needswird eine Protokolldatei erstellt, die alle von / ausgeführten Befehle / Aktionen enthält. yourbatch.batLassen Sie uns wissen, was Sie dort sehen.
JSanchez

Antworten:

12

Sie können Ihrem Skript Folgendes hinzufügen, damit es erhöht ausgeführt wird. Sie müssen nichts herunterladen.

:: 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"
:--------------------------------------
user325534
quelle
Alles, was dies tut, ist Requesting administrative privileges...auf dem Bildschirm zu drucken, bis das Zeitlimit überschritten ist.
Der Muffin-Mann
@ The Muffin Man. Fügen Sie Ihre Befehle am Ende der Batch-Datei hinzu und sie werden nach dem Erhöhen ausgeführt.
Pelms
1
Diese Methode ist ausgezeichnet. Es sind keine zusätzlichen Abhängigkeiten erforderlich (wie bei psexec).
William
Mit diesem Skript in eine Endlosschleife
geraten
0

Teilen Sie Ihre Batch-Datei in zwei Teile. Der Teil, den Sie als admincmd ausführen möchten, wird in system32 eingefügt. Der Teil, den Sie in normalem cmd ausführen möchten, fügen Sie ihn in einen regulären Ordner ein und rufen Sie von hier aus die zweite Batch-Datei auf, die sich dort befindet, system32. Auf diese Weise läuft der zweite Teil immer in admincmd. Ich habe es versucht und es funktioniert für mich.

Sudhi
quelle
0

Wenn Ihnen Software von Drittanbietern nichts ausmacht, können Sie versuchen, sie als Kennwort runasspc auszuführen. Ihr Passwort wird in einer verschlüsselten Datei gespeichert. Das Passwort muss nicht in der Batch-Datei verfügbar gemacht werden.

Sonne
quelle
0

Der Befehl "Runas" "sudo" Ihren Befehl nicht.

Um dies aus einer Batch-Datei heraus zu tun, müssen Sie die Befehle, die Sie erzeugen, "erhöhen". Laden Sie die Elevate Powertoy-Skripte herunter.

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

Starten Sie Ihre Befehle wie folgt:

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

oder

runas /user:(PC name)\(admin username) /savecred "elevate sc stop \"(service name)\""
surfasb
quelle
Ich habe die folgenden drei Befehle versucht: 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"und jeder von ihnen gibt diesen Fehler zurück: RUNAS ERROR: Unable to run - elevate.cmd net stop alfrescoTomcat -2147467259: Unbekannter Fehler
Stuart Leyland-Cole
3-zeilige Batch-Datei, die den Befehl erhöht ausführen wird: github.com/kasajian/pseudo
zumalifeguard
0

Was ich benutze, ist der folgende Code:

::#################################################################################################################################
:: 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

Legen Sie es nach Ihrem @echo aus und Bemerkungen.

Fünftes Axiom
quelle
0

Vereinfachte Antwort (zusätzlich zu user325534), wenn Sie nur in einem Verzeichnis mit verbessertem Zugriff arbeiten müssen:

@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"
Lietus
quelle
0

Mit diesem Code kann der cmd nach dem Benutzerkennwort fragen. Der Benutzer muss sein Passwort eingeben und das executable.batwird dann als Administrator ausgeführt

main.bat

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

ausführbare Datei.bat

all code that runs as administrator
jfraber
quelle