it-swarm.com.de

Ist es möglich, eine Batch-Datei automatisch als Administrator auszuführen?

Ich frage mich, ob es möglich ist, automatisch eine Batchdatei als Administrator zu öffnen, wenn Sie auf die Batchdatei doppelklicken, da die Befehle mit Administratorrechten ausgeführt werden müssen.

Hinweis: Ich kenne bereits die Lösung, mit der rechten Maustaste auf die Datei zu klicken und auf Run As Administrator zu klicken, aber dies ist keine automatische Lösung.

43
Antp

Ja, Sie können eine Batchdatei mit Administratorrechten ausführen. Leider können Sie dies nicht direkt aus der Batch-Datei heraus tun. Sie müssen zuerst eine Verknüpfung dieser Batchdatei erstellen und die Eigenschaften für diese Verknüpfung ändern, damit dies funktioniert.

Um eine Verknüpfung zu erstellen, gibt es viele Möglichkeiten. Die einfachste und schnellste Möglichkeit ist jedoch die Verwendung der Option Senden an im Kontextmenü.

Right click batch file > Send to > Desktop (create shortcut)

Natürlich können Sie die Verknüpfung auch an einen beliebigen Ort senden. Führen Sie die folgenden Schritte aus, um die Batchdatei für die Ausführung als Administrator zu erhöhen:

  1. Klicken Sie mit der rechten Maustaste auf die gerade erstellte Verknüpfung (sollte sich auf dem Desktop befinden oder wo immer Sie sie senden).
  2. Klicken Sie auf der Registerkarte Verknüpfung auf die Schaltfläche Erweitert.
  3. Aktivieren Sie das Kontrollkästchen Als Administrator ausführen und klicken Sie auf OK, um sowohl das modale Fenster als auch das Haupteigenschaftenfenster aufzurufen.
  4. Führen Sie die Verknüpfung durch Doppelklicken aus, und die Batchdatei sollte als Administrator ausgeführt werden.
39
10100111001

Wie in eine Antwort von Ben Gripka auf eine andere Frage gepostet:

REM --add the following to the top of your bat file--


@echo off

:: 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"
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
28
user399109

unter Windows 7

  1. Erstellen Sie eine Verknüpfung zu dieser Batch-Datei

  2. Klicken Sie mit der rechten Maustaste auf die Verknüpfungsdatei

  3. Klicken Sie auf Weiter , um ein Kontrollkästchen für die Ausführung als Administrator zu finden

Überprüfen Sie den Screenshot unten

Screenshot

4
fedmich

Sie können mein Skript Batch_Admin automatisch zu erhöhen den Administrator für den Einsatz in jeder Art von Batch eigenen Skript oder BAT oder CMD verwenden. Diese Funktion gewährleistet die Arbeit in einer Standardumgebung mit Standardwerkzeugen und auf die gleiche Weise in verschiedenen Windows-Systemen. Es werden mehrere standardmäßige und integrierte Windows-Befehle verwendet. Verwenden Sie keine anderen externen Skripte. Es kann verwendet werden, um ein beliebiges Programm als Administrator aufzurufen, nicht nur Scripts Batch. Es reicht aus, ein kleines Skript zu erstellen, das dann das Programm aufruft, das die Berechtigung Administartor benötigt. Platzieren Sie dies in einem beliebigen Suchpfadordner (von% PATH%).

Um es zu verwenden, fügen Sie einfach die folgende Zeile (genau wie) in das übergeordnete Stapelskript ein, das als Administrator ausgeführt werden soll. Dies wird am besten an der Spitze unserer Mutter Skript getan, und es ist am besten, die erste, die weiter über die CALL aufgerufen wird, einig Sub-Skripte (unten, um detaillierte Informationen).

net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Dies kann in jedes untergeordnete Skript eingefügt werden, das mit der CALL-Syntax aufgerufen wird. Um eine Nachricht anzuzeigen, solange sie noch nicht über Administratorrechte verfügt, z. Setzen Sie vor dem Aufruf von Batch_Admin für 5 Sekunden die Variable "ShowAdminInfo" auf die Anzahl der Sekunden

SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

So funktioniert es:

• Ruft UAC.ShellExecute über VBScript auf, um Benutzerberechtigungen abzurufen

• Batch führt das Skript oder BAT oder CMD aus

• Skriptanrufer können lange Namensräume in Anführungszeichen enthalten

• Geben Sie alle Parameter zurück, die das über die Befehlszeile übergebene Masterskript aufgerufen hat, als ob keine Übertragung des Aufrufs stattgefunden hätte, und beginnen Sie etwas von vorne, auch mit Sonderzeichen wie Ausrufezeichen (!) Und Prozentzeichen (%) sowie mit Klammern ()

• Hält einen Master-Skript-Speicherort, wenn der Aufruf in dem Verzeichnis stattgefunden hat, in dem dieses Skript der Master ist

• Auxiliary zeigt eine Meldung an, wenn wir die Variable "ShowAdminInfo" vor uns setzen, z. für 5 Sekunden, die den sofortigen Übergang der Rechte des Administrators verhindern können, der zusätzliche Informationen und die Möglichkeit einer informierten Entscheidung gibt. Beispiele für die Einstellung, die festgelegt werden muss: SET ShowAdminInfo = 5 Da diese Variable nicht definiert ist, wird sie standardmäßig nicht angezeigt.

• Das Skript ruft auch im Systemsuchpfad% PATH% und von der Netzwerkressource auf, z. B .:\Computer\share\test.bat

• Verhindert Missverständnisse beim Schreiben der erforderlichen Hilfsdateien, wenn das Skript fast gleichzeitig mehrere Batch_Admin aufruft. Es wird die Zufallszahl von 1 bis 100 verwendet

• Am besten verwenden Sie es jedoch im übergeordneten Skript. Der Übergang zu Administratorrechte erfordert immer, dass Sie das Skript ausführen vollständig wieder in einem neuen Fenster, in einer neuen Umgebung, ohne Rückgriff auf die die Variablen werden vorher in unserem Skript und Werte dieser Variablen nicht bestanden dann als Administrator nennen . Nur das Skript wird erneut ausgeführt.

Unten ein vollständiges Skript Batch_Admin. Erweiterte Informationen dazu finden Sie auf meiner Seite.

Kopieren Sie den folgenden Text in den Editor und speichern Sie ihn auf der Festplatte als: Batch_Admin.bat

@echo off
if "%~1"=="" (echo *** Batch_Admin ***&echo.&echo Automatically get admin rights for another Batch. See info inside.&TIMEOUT /T 30>nul&goto:eof)

::  A D M I N I S T R A T O R   - Automatically get admin rights for script batch. Paste this on top:    net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*
::                                Also keep Batch directory localisation and then set variable:   PATH_BAT
::                                if earlier variable "ShowAdminInfo" is empty (not defined) then no info, else showing info with number of seconds
::
::                                Elaboration:  Artur Zgadzaj
setlocal
setlocal DisableDelayedExpansion

SET "Localy="
if exist "%~1"      SET "Localy=YES"
if exist "%~1.BAT"  SET "Localy=YES"
if exist "%~1.CMD"  SET "Localy=YES"
if defined Localy   FOR %%I IN ("%~1") DO SET "PATH_BAT=%%~dI%%~pI"

 SET P1=%~1
 SET Parameters=%*
 SET Parameters=%Parameters:!=^^!%
setlocal EnableDelayedExpansion
 SET Parameters=!Parameters:%P1%=!
 SET Parameters=!Parameters:%%=%%%%!
setlocal DisableDelayedExpansion
 SET Parameters=%Parameters:~3%

net session >nul 2>nul&if not errorlevel 1  goto Administrator_OK

if not defined ShowAdminInfo   goto skip_message_Administrator
echo.
echo Script:  %~1
echo.
echo *****************************************************************
echo ***    R U N N I N G     A S     A D M I N I S T R A T O R    ***
echo *****************************************************************
echo.
echo Call up just as the Administrator. You can make a shortcut to the script and set:
echo.
echo          shortcut ^> Advanced ^> Running as Administrator
echo.
echo     Alternatively run once "As Administrator"
echo     or in the Schedule tasks with highest privileges
echo.
echo Cancel Ctrl-C or wait for launch  %ShowAdminInfo%  seconds ...
TIMEOUT /T %ShowAdminInfo% > nul

:skip_message_Administrator
MD %TEMP% 2> nul
SET /A $Admin$=%RANDOM% * 100 / 32768 + 1

SET "Percent="
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul
echo %Parameters% > "%TEMP%\$Admin_%$Admin$%_Test.bat"
if not exist "%TEMP%\$Admin_%$Admin$%_Test.bat"  SET Percent=^"
del "%TEMP%\$Admin_%$Admin$%_Test.bat" 2>nul

echo @SET "PATH_BAT=%PATH_BAT%"               > "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
echo @SET "BatchFullName=%BatchFullName%"    >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"
if defined Localy  (echo @CD /D "%PATH_BAT%" >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat")
echo @"%~1" %Parameters% %Percent% >> "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat"

echo SET UAC = CreateObject^("Shell.Application"^)                                   > "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
echo UAC.ShellExecute "%TEMP%\$Admin_%$Admin$%_Batch_Start.bat", "", "", "runas", 1 >> "%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
"%TEMP%\$Admin_%$Admin$%_Batch_getPrivileges.vbs"
endlocal
exit /B

:Administrator_OK
"%~1" %Parameters%
goto:eof
REM *** A D M I N I S T R A T O R  - Automatically get admin rights  (The End)  ***
3
Artur Zgadzaj

Die akzeptierte Antwort funktioniert tatsächlich. Aber ich stellte fest, dass ich in Windows 7 den UAC-Dialog jedes Mal aushalten musste, wenn auf die Verknüpfung geklickt wurde. Diese IMHO lenkt erheblich vom "automatisch" in dieser Frage ab!

Dann stellte ich fest, dass in meiner eigenen Situation die betreffende .bat-Datei vom Taskplaner ausgeführt werden soll. In diesem Fall kann das Problem durch Aktivieren der Option Run with highest privileges auf der Registerkarte General der Aufgabe behoben werden. Der .bat wird dann problemlos als Administrator ausgeführt.

PS: Ich wusste nicht, dass ich mit dieser Antwort keine Bilder hochladen konnte, weil ich gerade einen netten kleinen Screenshot bei mir habe! Oder kann ich?

3
Ifedi Okonkwo
@echo off        
:: 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  
chkdsk

Dies funktioniert auchSOURCE: https://social.technet.Microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch -file

Alternativ können Sie eine zweite Batch-Datei erstellen, mit der Sie alles als Administrator ausführen können, während Sie das Administratorkennwort nur einmal eingeben. Das Kennwort wird in einem Authentifizierungstoken gespeichert und erfordert, dass ein echter Computer weiß, wie man es knackt.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
1
Brapapple

Sie können ein Befehlszeilenprogramm elevate verwenden. (Download-Link - https://drive.google.com/open?id=0Bz7qe_olclTwVGZLUklFMHNxQ00 )

Usage: Elevate [-?|-wait|-k] prog [args]
-?    - Shows this help
-wait - Waits until prog terminates
-k    - Starts the the %COMSPEC% environment variable value and
                executes prog in it (CMD.EXE, 4NT.EXE, etc.)
prog  - The program to execute
args  - Optional command line arguments to prog
0
T.Todua

Es ist ein Beispiel, um die Fledermaus als Administrator auszuführen. Für mich geht das.

Es geht so:

if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
  echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
:eof
start Cmd /k "netsh wlan show profile"
pause </

cls
Color 0A
@echo off
echo.
cls
set/p ProfileName=Type the name of the current Wifi signal? 
echo.
start Cmd /k "netsh wlan show profile name=%ProfileName% key=clear"
pause </
exit
pause
0
JoshMoreNo