Come codificare un file BAT per eseguirlo sempre come modalità amministratore?


Risposte:


71

Utilizzi runasper avviare un programma come utente specifico:

runas /user:Administrator Example1Server.exe

6
@karikari: un nome come questo ( Example1Server.exe) non deve essere messo tra virgolette, ma in alcuni altri casi (come spazi nel nome :) Example1 Server.exene avresti davvero bisogno. È possibile utilizzare le virgolette, anche se non sono necessari, però.
Andriy M,

18
L'account amministratore potrebbe non essere nominato Amministratore
Anders il

9
@Anders: No, potrebbe non esserlo; Suppongo che l'OP possa "individuare il modello". Questa non era una risposta plz-give-me-teh-codez: -S A proposito, dovrei aggiungere l'OP potrebbe volere qualche comando più elaborato come runas /User:abc "csript myscript.vbs", o runas /User:abc "cmd /c start ...".
Kerrek SB,

16
Temo che questa risposta non sia ciò che il 90% dei visitatori desidera, dal momento che è ancora più difficile del clic destro-> esegui come amministratore, anche se tecnicamente corretto. Controlla ancora l'altra risposta. È esattamente ciò che la maggior parte vorrà.
j riv

13
No, questa risposta è tecnicamente errata. L'esecuzione come amministratore non è la stessa di quella di un utente il cui nome è amministratore e i privilegi sono diversi. Vedi l'altra risposta.
Alexander Gelbukh,

370

L'altra risposta richiede l'inserimento della password dell'account amministratore. Inoltre, l'esecuzione con un account nel gruppo di amministratori non equivale a quella eseguita come amministratore : UAC su Wikipedia

Istruzioni per Windows 7

Per essere eseguito come amministratore, creare un collegamento per il file batch.

  1. Fare clic con il tasto destro del mouse sul file batch e fare clic su Copia
  2. Passare al punto in cui si desidera il collegamento
  3. Fare clic con il tasto destro del mouse sullo sfondo della directory
  4. Seleziona Incolla collegamento

Quindi è possibile impostare il collegamento da eseguire come amministratore:

  1. Fare clic con il tasto destro del collegamento
  2. Scegli Proprietà
  3. Nella scheda Collegamento, fai clic su Avanzate
  4. Seleziona la casella di controllo "Esegui come amministratore"
  5. Fai clic su OK, OK

Ora, quando fai doppio clic sul collegamento, ti verrà richiesta la conferma UAC e quindi Esegui come amministratore (che, come ho detto sopra, è diverso rispetto all'esecuzione con un account nel Gruppo amministratori)

Controlla lo screenshot qui sotto

Immagine dello schermo

Nota: quando si esegue Esegui come amministratore, la directory (percorso) corrente non sarà la stessa del file bat. Ciò può causare alcuni problemi in molti casi in cui il file bat si riferisce a file relativi accanto. Ad esempio, nel mio Windows 7 la directory cur sarà SYSTEM32 invece della posizione del file bat! Per aggirare il problema , è necessario utilizzare

cd "%~dp0"

o meglio

pushd "%~dp0"

per assicurarsi che cur dir sia nello stesso percorso in cui si trova il file bat.


8
Ah, quello era davvero nascosto (la maggior parte di noi non pensava che quel pulsante avanzato avesse quell'opzione). Sono quasi sicuro che chiunque abbia pensato all'altra risposta complessa non lo sapeva. Questa è la risposta che il 90% + dei visitatori vorrà.
j riv

1
Sono d'accordo. questa dovrebbe essere la risposta. Ho anche aggiunto uno screenshot per facilitare la ricerca del pulsante di avanzamento
fedmich,

1
Questo vale anche per Windows Server 2012 R2.
garec,

3
Questo non funziona per me su Windows 10 o Windows 7. Quando provo ad eseguire come amministratore, facendo clic con il pulsante destro del mouse sul file BAT e "Esegui come amministratore" o utilizzando la tecnica descritta qui, il file batch lampeggia per un secondo quindi si chiude immediatamente senza comandi o programmi nell'esecuzione del file batch. Ho provato a eseguire file batch molto semplici che fanno eco a "Hello World" e anche loro falliscono in questo modo. Questo è molto frustrante. Finora non sono stato in grado di trovare una soluzione.
Jonathan Elkins,

1
@JonathanElkins hai provato ad aggiungere una pausa alla fine del file batch?
Ed Greaves,

32

Basta aggiungere questo nella parte superiore del file bat:

set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

Eleverà l'amministratore e rimarrà anche nella directory corretta. Testato su Windows 10.


1
Testato su Windows 7 e funziona alla grande. Ma potresti spiegare cosa fa? Non ho familiarità con i file bat.
Sunfloro

1
Crea un file VBScript con codice che ti porta all'amministratore (se non lo sei già) e esegue nuovamente il file bat, questa volta come amministratore.
Sire,

1
Cosa sto cercando esattamente! non sono necessarie modifiche o file extra!
MSS,

1
che cos'è getadmin.vbs?
Kiquenet,

4
Aggiungere due righe di codice al mio file batch esistente è una buona soluzione per me. Ho dovuto aggiungere anche exitalla fine del mio file batch o sarei rimasto al prompt. Ciò è probabilmente dovuto al fatto che .vbs avvia un secondo prompt dei comandi.
Ben

10

Se è possibile utilizzare un'utilità di terze parti, ecco elevateun'utilità della riga di comando .

Questa è la descrizione dell'uso:

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

elevate.exerocks!
Sangbok Lee,

8

È possibile utilizzare nircmd.exe 's Elevate comando

Guida ai comandi di NirCmd - elevate

elevate [Program] {Command-Line Parameters}

Solo per Windows Vista / 7/2008: eseguire un programma con diritti di amministratore. Quando il [Programma] contiene uno o più caratteri spaziali, è necessario inserirlo tra virgolette.

Esempi:

elevate notepad.exe 
elevate notepad.exe C:\Windows\System32\Drivers\etc\HOSTS 
elevate "c:\program files\my software\abc.exe"

PS: lo uso su Win 10 e funziona


6

converti il ​​tuo file batch in .exe con questo strumento: http://www.battoexeconverter.com/, quindi puoi eseguirlo come amministratore


2
Tieni presente che molti antivirus sono estremamente sensibili ai file exe creati in questo modo. "convertire / crittografare" i file batch in questo modo, è un vecchio modo usato dai programmi dannosi.
Hamy,

Se si analizza questo dominio utilizzando Symantec - Tipo di minaccia: altro malware Motivo della minaccia: dominio segnalato e verificato come malware. Identificato come dominio o URL dannoso.
Sunil

Cattivo suggerimento!
Vlad

6
go get github.com/mattn/sudo

Poi

sudo Example1Server.exe

6

Penso di avere una soluzione al problema della password. Questo singolo argomento è davvero sorprendente. Richiede la password una volta e che non la richiede mai più. Anche se lo metti su un altro programma, non ti chiederà la password. Ecco qui:

runas /user:Administrator /savecred Example1Server.exe


4
  1. Il mio esperimento indica che il comando runas deve includere il dominio dell'utente admin (almeno nella configurazione ambientale della mia organizzazione):

    runas /user:AdminDomain\AdminUserName ExampleScript.bat
    

    Se non si conosce già il dominio dell'utente amministratore, eseguire un'istanza del prompt dei comandi come utente amministratore e immettere il comando seguente:

    echo %userdomain%
    
  2. Le risposte fornite sia da Kerrek SB che da Ed Greaves eseguiranno il file di destinazione sotto l'utente admin ma, se il file è uno script Command (file .bat) o VB (file .vbs) che tenta di operare sul login normale ambiente dell'utente (come la modifica delle voci di registro), è possibile che non si ottengano i risultati desiderati poiché l'ambiente in cui viene effettivamente eseguito lo script sarà quello dell'utente amministratore, non dell'utente con accesso normale! Ad esempio, se il file è uno script che opera sull'hive HKEY_CURRENT_USER del registro, l '"utente corrente" interessato sarà l'utente amministratore, non l'utente con accesso normale.


0

Utilizzare l'unità \ percorso fisico completo per il file batch di destinazione nelle proprietà del collegamento.

Questo non funziona in Windows 10 se usi le unità secondarie come ho provato a fare all'inizio ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.