it-swarm.com.de

Batch-Skript zur Ausführung als Administrator

Ich schreibe ein Client/Server-Überprüfungsprogramm, aber es muss als Administrator ausgeführt werden.

Ich möchte, dass dies unbeaufsichtigt in meinem Netzwerk und in meinen Benutzern ausgeführt wird, und ich möchte nicht, dass die Aufforderung "Als Administrator ausführen" ausgeführt wird. Gibt es einen Anfangscode, den ich in die Batchdatei einfügen kann, damit er automatisch als Administrator ausgeführt wird?

Lösungen, die nicht funktionierten

Nein: Die - Erstellen einer Verknüpfung [-> Kompatibilität -> "Dieses Programm als Administrator ausführen"] funktioniert nicht.

Diese Option ist in Windows 7 ausgegraut. Auch bei deaktivierter Benutzerkontensteuerung

Nein: Der runas /env /user:domain\Administrator <program.exe/command you want to execute> reicht auch nicht aus, da der Benutzer zur Eingabe des Administratorkennworts aufgefordert wird.

Lösung, die funktioniert hat

Ja: Deaktivieren Sie die Benutzerkontensteuerung -> Erstellen Sie einen Job mit dem Task-Scheduler. Dies hat für mich funktioniert.

  • Erstellen Sie einen Job unter Taskplaner, und führen Sie ihn als Benutzer mit Administratorberechtigungen aus. 
  • Markieren Sie explizit: "Mit höchsten Privilegien ausführen"
  • Deaktivieren Sie die Benutzerkontensteuerung, sodass keine Aufforderung zur Ausführung dieser Aufgabe angezeigt wird

Sie können das Skript anschließend für die Benutzerkontensteuerung aktivieren, indem Sie die Registrierung bearbeiten, wenn Sie möchten. In meinem Fall wird dieses Skript nur einmal ausgeführt, indem eine virtuelle Windows-Maschine erstellt wird, bei der die Benutzerkontensteuerung im Abbild deaktiviert ist.

Ich freue mich immer noch auf den besten Ansatz für ein Skript, das als Administrator ohne viel Aufwand ausgeführt wird.

14
zenin
@echo off

 call :isAdmin

 if %errorlevel% == 0 (
    goto :run
 ) else (
    echo Requesting administrative privileges...
    goto :UACPrompt
 )

 exit /b

 :isAdmin
    fsutil dirty query %systemdrive% >nul
 exit /b

 :run
  <YOUR BATCH SCRIPT HERE>
 exit /b

 :UACPrompt
   echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
   echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"

   "%temp%\getadmin.vbs"
   del "%temp%\getadmin.vbs"
  exit /B`
10
Anoop V U

es ist möglich mit der Syntax:

RUNAS [/profile] [/env] [/netonly] /user:user Program

Key :
/profile Option to load the user's profile (registry)
/env Use current environment instead of user's.
/netonly Use the credentials specified only for remote connections.
/user Username in form [email protected] or DOMAIN\USER
([email protected] is not compatible with /netonly)
Program The command to execute

beispiel: 

runas /env /user:domain\Administrator <program.exe/command you want to execute>

Folgendes ist eine Problemumgehung:

  1. Erstellen Sie eine Verknüpfung der .bat-Datei
  2. Öffne die Eigenschaften der Verknüpfung. Klicken Sie unter der Registerkarte mit den Verknüpfungen auf auf Erweitert .
  3. "Als Administrator ausführen" ankreuzen

Wenn Sie die Verknüpfung ausführen, wird Ihr Batch-Skript als Administrator ausgeführt.

4
L01c

Sie haben mehrere Möglichkeiten.

  1. Wenn Sie nur eine Batchdatei und systemeigene Befehle verwenden müssen, check out Wie kann ich die Batchdatei automatisch erhöhen, sodass sie bei Bedarf UAC-Administratorrechte anfordert? .

  2. Wenn Drittanbieter-Dienstprogramme eine Option sind, können Sie ein Werkzeug wie Elevate verwenden. Es ist eine ausführbare Datei, die Sie mit dem Programm aufrufen, das Sie als Parameter als erhöht ausführen möchten.
    Wie folgt: elevate net share ....

3
aphoria

Ich habe diese geringfügige Änderung an Matts Skript vorgenommen, damit es innerhalb eines einzelnen Skripts ausgeführt werden kann (fügen Sie dies einfach an den Anfang eines Skripts ein, für das ein Aufruf der Benutzerkontensteuerung erforderlich ist), aber lesen Sie den folgenden Code, um eine noch bessere Lösung für a zu finden Blog:

:: ### START UAC SCRIPT ###

if "%2"=="firstrun" exit
cmd /c "%0" null firstrun

if "%1"=="skipuac" goto skipuacstart

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B

:gotPrivileges

setlocal & pushd .

cd /d %~dp0
cmd /c "%0" skipuac firstrun
cd /d %~dp0

:skipuacstart

if "%2"=="firstrun" exit

:: ### END UAC SCRIPT ###

:: ### START OF YOUR OWN BATCH SCRIPT BELOW THIS LINE ###

Wie Sie sehen, werden in meiner Änderung zwei Dateiargumente verwendet, die nicht besonders elegant sind, aber die Aufgabe erfüllen (und die Sie am Ende immer ausblenden können, indem Sie die ersten paar Argumente mit Platzhaltern als Dummy reservieren). Außerdem unterstützt das Skript von AFAIK Matt keine Leerzeichen in Dateipfaden, und diese Einschränkung gilt auch für meine Änderung dieses Skripts.

Dieses Problem scheint in der Art und Weise zu liegen, wie VBS diese Pfade verarbeitet. Unter dem folgenden Link finden Sie jedoch eine noch bessere VBS-basierte Lösung zum Aufrufen der Benutzerkontensteuerung, die in einem einzelnen Skript ausgeführt wird, ohne dass eine solche Problemumgehung mithilfe von Dateiargumenten erforderlich ist und das unterstützt auch Leerzeichen in Dateipfaden:

http://pcloadletter.co.uk/2012/12/11/uac-elevation-for-batch-script/

Das Skript auf diesem Link führt, wie Sie feststellen werden, geringfügig andere VBS-Aufrufe aus, wodurch das Problem mit Leerzeichen aus irgendeinem Grund umgangen wird.

1
abvgd

Erstellen Sie eine Verknüpfung, und legen Sie fest, dass die Verknüpfung immer als Administrator ausgeführt wird.

How-To-Geek-Forum Erstellen Sie eine Batch-Datei, um cmd als Administrator auszuführen solution:

Erstellen Sie eine Stapeldatei in einem Editor und nameit.bat und erstellen Sie dann eine Verknüpfung dazu. Nameit.bat - Abkürzung. Klicken Sie dann mit der rechten Maustaste auf Nameit.bat - Verknüpfung -> Eigenschaften -> Registerkarte Verknüpfung -> Erweitert, und klicken Sie auf Als Administrator ausführen. Führen Sie es aus der Verknüpfung aus. 

Da ich bisher kein einfaches Skript gefunden habe, sind hier meine zwei Cents:

set ELEVATE_APP=Full command line without parameters for the app to run
set ELEVATE_PARMS=The actual parameters for the app
echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs
echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs
echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs
echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs
DEL elevatedapp.vbs
1

Sie könnten es als Startobjekt verwenden ... Bei Startelementen wird überhaupt keine Aufforderung zur Ausführung als Administrator angezeigt.

Überprüfen Sie diesen Artikel Erhöhte Programmverknüpfung ohne UAC rompt

0
sandrows

Verschwenden Sie keine Zeit, verwenden Sie diesen einzeiligen Befehl, um die Befehlszeile als Administrator auszuführen:

echo createobject("Shell.application").shellexecute "cmd.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs & del /f runas.vbs

wenn Sie eine Anwendung mit Administratorrechten starten möchten, geben Sie den Lochpfad für diese Anwendung wie diesen Notizblock ++ in meine Programmdateien ein. Beispiel:

echo createobject("Shell.application").shellexecute "%programfiles%\Notepad++\notepad++.exe",,,"runas",1 > runas.vbs & start /wait runas.vbs
0
hollopost

Meine Lösung: Wenn Sie keine .bat-Datei benötigen, ist es, die Batchdatei in eine .exe-Datei zu konvertieren. Dann können Sie run als admin einrichten.

0
Adam

Wenn alle oben genannten Antworten nicht Ihren Wünschen entsprechen, können Sie autoIT verwenden, um Ihre Datei (oder was auch immer) mit einem bestimmten Benutzer mit ihren Anmeldeinformationen auszuführen. 

Beispiel eines Skripts, mit dem ein Programm mit den Privilegien dieser Benutzer ausgeführt wird.

installAdmin()

Func installAdmin()
    ; Change the username and password to the appropriate values for your system.
    Local $sUserName = "xxxxx"
    Local $sPassword = "xxx"
    Local $sDirectory = "C:\ASD4VM\Download\"
    Local $sFiletoRun = "Inst_with_Privileges.bat"

    RunAsWait($sUserName, @ComputerName, $sPassword, 0, $sDirectory & $sFiletoRun)
EndFunc   ;==>Example

AutoIT finden Sie hier. -> Es verwendet ein .ua3-Format, das zu einer EXE-Datei kompiliert wird, die ausgeführt werden kann.

0
Ruan