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

48

Ich frage mich, ob es möglich ist, eine Batchdatei automatisch 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 für das Klicken mit der rechten Maustaste auf die Datei und das Klicken auf Run As Administrator, dies ist jedoch keine automatische Lösung.

Antp
quelle
Ich konnte dies für mich zum Laufen bringen
Rohit
2
Wie können zwei Linksklicks automatischer sein als ein Links- und ein Rechtsklick?
Jiggunjer

Antworten:

44

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. Gehen Sie folgendermaßen vor, 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.
10100111001
quelle
1
Sie können die Batch-Datei jederzeit zwingen, die Verknüpfung aufzurufen, und die Verknüpfung einen Parameter übergeben lassen, um zu wissen, dass die Verknüpfung nicht aufgerufen werden soll. Sie würden so etwas wie if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFrechts unten einfügen @echo offund den Verknüpfungslink zu program.bat aanstatt nur zu erstellen program.bat.
Trlkly
2
Ifedi schreibt: "Die akzeptierte Antwort [diese von Tech1337] funktioniert in der Tat. Aber ich stellte fest, dass ich in Windows 7 den UAC-Dialog jedes Mal ertragen musste, wenn auf die Verknüpfung geklickt wurde." <- Obwohl jemand anderes sagt, es funktioniert ohne UAC
Barlop
Bei mir läuft die Verknüpfung beim Doppelklick nicht im aktuellen Verzeichnis, wohingegen die .bat-Datei dies tut. Auch mit der Eigenschaft "Start in:" auf der Verknüpfung ausgefüllt. Stellen Sie also sicher, dass Ihre .bat-Datei vollständige Dateipfade angibt.
Rob Mosher
29

Wie in einer Antwort von Ben Gripka auf eine andere Frage geschrieben:

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"
:--------------------------------------
user399109
quelle
Ja, ich habe das gefunden und benutze es aktuell. Trotzdem danke!
Antp
Im Grunde das, wonach ich gesucht habe. Hoffen Sie, dass es einen Weg gibt, dies ohne VB zu tun?
Chef Pharao
@ChefPharaoh Dadurch wird eine Konsole mit erhöhten Rechten zum Ausführen der Batchdatei erstellt. Sie können dasselbe mit einem Powershell-Skript tun.
Jiggunjer
Dies war die beste Antwort für mich.
Kasperhj
4

Die akzeptierte Antwort funktioniert tatsächlich. In Windows 7 musste ich den UAC-Dialog jedoch jedes Mal aushalten, 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 .batbetreffende Datei von Task Scheduler ausgeführt werden soll. In diesem Fall kann das Problem durch Aktivieren der Run with highest privilegesOption auf der GeneralRegisterkarte der Aufgabe behoben werden. Der .batwird dann als Administrator problemlos ausgeführt.

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

Ifedi Okonkwo
quelle
2
Wenn Sie den Bildern Links hinzufügen, werden diese von jemandem für Sie eingebunden.
Ramhound
@ Ramhound. Links zu den Bildern hinzufügen? Das Bild befindet sich auf meinem Desktop, nicht irgendwo online. Oder fehlt mir doch was?
Ifedi Okonkwo
Ja; Sie laden sie hoch. Sie können die Screenshots einfach nicht in Ihre Antwort einbinden.
Ramhound
Entweder war dieser Upload-Button nicht da, oder ich war gestern halb blind! Ich bin sicher, es war Letzteres. Wie auch immer, ich habe den Datei-Upload sehr gut abgeschlossen, nur um zu erfahren, dass ich eine Wiederholung von 10 brauchte, um Bilder zu posten. Trotzdem danke.
Ifedi Okonkwo
Sie können den Link trotzdem in die Antwort einfügen.
Ramhound
4

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 die Schaltfläche "Weiter" , um ein Kontrollkästchen für die Ausführung als Administrator zu finden

Überprüfen Sie den Screenshot unten

Bildschirmfoto

fedmich
quelle
1
Ihr Sprichwort entspricht der akzeptierten Antwort.
Antp
Ja, ich wollte nur eine einfache Liste mit Screenshots für alle erstellen, die es eilig haben.
fedmich
3
Wenn jemand in Eile ist, bezweifle ich, dass er für die Antwort nach unten scrollen wird.
Trotzdem
3

Sie können mein Skript Batch_Admin verwenden, um den Administrator automatisch für die Verwendung in jedem Typ von Batch-eigenem Skript, BAT oder CMD zu erhöhen. 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 geschieht am besten am oberen Rand unseres übergeordneten Skripts und es ist am besten, dass zuerst einige Unterskripte, die über den CALL aufgerufen werden, weiter unten ausführlich erklärt werden.

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 aufruft, 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 erfolgte, 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 den Systemsuchpfad% PATH% und eine 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 Administratorrechten setzt immer voraus, dass Sie das Skript in einem neuen Fenster in einer neuen Umgebung erneut vollständig ausführen, ohne auf die zuvor in unserem Skript festgelegten Variablen zurückzugreifen, und die Werte dieser Variablen wurden dann nicht an den Aufruf als Administrator übergeben . 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)  ***
Artur Zgadzaj
quelle
Ich denke , das ist ähnlich oder identisch mit der obigen Antwort: superuser.com/a/852877/375935
jiggunjer
1

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)"
Brapapple
quelle
1
@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 auch SOURCE: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file

Josue Moreno Cervantes
quelle
Können Sie Ihre Lösung erklären?
Scai
1
Eine andere Version von superuser.com/a/852877/375935
jiggunjer
0

Sie können ein Befehlszeilenprogramm verwenden elevate. (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
T.Todua
quelle
Ruft dies nicht eine UAC-Übersicht auf?
Antp
das bringt auf ... aber es ist besser als nichts (
siehe
Nicht wirklich "automatisch", ist es
Antp
0

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
JoshMoreNo
quelle
Willkommen bei Super User! Während dies die Frage beantworten mag, wäre es eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill
Noch eine andere Variante von superuser.com/a/852877/375935
jiggunjer