2014-07-28 03:24:17 +0000 2014-07-28 03:24:17 +0000
50
50

È possibile eseguire automaticamente un file batch come amministratore

Mi chiedo se sia possibile automaticamente aprire un file batch come amministratore quando si fa doppio clic sul file batch, perché i comandi devono essere eseguiti con i diritti amministrativi.

Nota: conosco già la soluzione di fare clic con il tasto destro del mouse sul file e cliccare su Run As Administrator, ma questa non è una soluzione automatica.

Risposte (9)

45
45
45
2014-07-28 03:43:30 +0000

Sì, è possibile eseguire un file batch con diritti amministrativi. Purtroppo non è possibile farlo direttamente dal file batch. Per far funzionare questo sistema, è necessario prima creare una scorciatoia di quel file batch e modificare le proprietà di tale scorciatoia.

Per creare una scorciatoia, ci sono molti modi, ma il più semplice e veloce è quello di utilizzare l'opzione Invia a nel menu contestuale.

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

Naturalmente è possibile inviare la scorciatoia dove si desidera. Per elevare il file batch da eseguire come amministratore, seguire la procedura seguente:

  1. 1. Cliccare con il tasto destro del mouse sul collegamento appena creato (dovrebbe essere sul desktop o dove lo si invia). 2. Sotto la scheda Scorciatoia, fare clic sul pulsante Avanzate…
  2. 3. Spuntare la casella di controllo Esegui come amministratore e premere OK sia nella finestra modale che nella finestra delle proprietà principali.
  3. Premere il tasto destro del mouse sul collegamento appena creato (dovrebbe essere sul desktop o in qualsiasi altro posto). 4. Eseguire la scorciatoia facendo doppio clic su di essa e il file batch dovrebbe essere eseguito come amministratore.
33
33
33
2014-12-15 16:55:24 +0000

Come pubblicato in una risposta da Ben Gripka ad un'altra domanda:

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"
:--------------------------------------
5
5
5
2015-02-10 14:25:39 +0000

su Windows 7

    1. Creare una scorciatoia per quel file Batch
    1. Fare clic con il tasto destro del mouse sul file di collegamento
    1. Fare clic su pulsante di avanzamento per trovare una casella di controllo per l'esecuzione come amministratore

Controllare la schermata sottostante

4
4
4
2014-10-07 18:42:22 +0000

La risposta accettata funziona davvero. Ma ho scoperto che in Windows 7, ho dovuto sopportare il dialogo UAC ogni volta che la scorciatoia viene cliccata. Questo IMHO sminuisce notevolmente l’“automatico” in questa domanda!

Poi ho scoperto che nella mia situazione, il file .bat in questione deve essere eseguito da Task Scheduler. In questo caso, selezionando l'opzione Run with highest privileges nella scheda General dell'attività, il problema è risolto. Il .bat viene poi eseguito come amministratore senza problemi.

PS: non mi ero reso conto che non potevo caricare immagini su questa risposta, perché ho un piccolo screenshot bello seduto proprio con me adesso! O posso?

3
3
3
2015-05-31 14:49:17 +0000

È possibile utilizzare il mio script Batch_Admin per elevare automaticamente l'amministratore per l'utilizzo in qualsiasi tipo di script Batch, o BAT o .CMD. Questa funzione garantisce il lavoro in un ambiente standard, con strumenti standard e allo stesso modo in diversi sistemi Windows. Utilizza diversi comandi standard e built-in di Windows. Non utilizzare altri script esterni. Può essere usata per chiamare qualsiasi programma come Amministratore, non solo script Batch. È sufficiente creare un piccolo script, che poi chiama il programma che richiede l'autorizzazione Administartor. Inserirlo in qualsiasi cartella PATH di ricerca (da %PATH%).

Per utilizzarlo, è sufficiente inserire la seguente riga (esattamente come) nel suo script Batch padre, che deve essere eseguito come Administrator. Questo è meglio farlo nella parte superiore del nostro script padre ed è meglio che prima, che sarà chiamato tramite la CALL ulteriormente, alcuni sottoscript (vedi spiegazione dettagliata qui sotto).

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

Questo può essere inserito all'interno di qualsiasi script figlio, chiamato dalla sintassi CALL. Per visualizzare un messaggio mentre è ancora in corso non ha privilegi di amministratore, ad es. per 5 secondi prima di chiamare Batch_Admin impostare la variabile “ShowAdminInfo” sul numero di secondi

@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)***
``` &001 


## Quindi come funziona: 


- Chiamate UAC. ShellExecute attraverso VBScript per prelevare i permessi utente 


- Batch esegue lo script, o BAT o CMD 


- Script caller può avere un lungo spazio dei nomi incluso nella chiamata tra virgolette 


- Restituisce tutti i parametri di chiamata dello script master passato dalla linea di comando, come se non ci fosse trasmissione della chiamata e fa partire qualcosa da zero, anche con caratteri speciali, come punti esclamativi (! ) e percentuale (%), e anche con le parentesi () 


- Mantiene la posizione di uno script master se la chiamata è avvenuta nella directory dove questo script è il master 


- L'ausiliario visualizza un messaggio se ci si pone davanti la variabile "ShowAdminInfo", ad es. per 5 secondi che può impedire il passaggio immediato dei diritti dell'Amministratore dando informazioni aggiuntive e la possibilità di una decisione informata. Esempi di impostazione che devono essere impostati: SET ShowAdminInfo=5 Di default, poiché questa variabile non è definita, non viene visualizzata. 

- Lo script chiama anche nel percorso di ricerca di sistema % PATH% e da risorsa di rete, come ad esempio: \Computer\share\test.bat 


- Previene i malintesi nella scrittura dei file ausiliari necessari quando lo script chiama più Batch\_Admin quasi contemporaneamente. Utilizza il numero casuale da 1 a 100 


- Ma, la cosa migliore è usarlo sullo script padre. Il passaggio ai diritti di amministratore richiede sempre che si esegua lo script completamente di nuovo, in una nuova finestra, in un nuovo ambiente, senza ricorrere alle variabili impostate in precedenza nel nostro script e i valori di queste variabili non sono passati poi a chiamare come amministratore. Solo lo script verrà eseguito di nuovo. 

Di seguito uno script completo Batch\_Admin. Informazioni più dettagliate sono disponibili sul mio sito. 


Copiare il seguente testo nel Blocco note e salvarlo su disco come: Batch\_Admin.bat 


&001
1
1
1
2015-11-26 03:54:44 +0000
@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

Anche questo funzionaSOURCE: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file

1
1
1
2014-07-28 14:33:06 +0000

In alternativa si può creare un secondo file batch, questo potrebbe consentire di eseguire qualsiasi cosa come amministratore, inserendo la password di amministratore una sola volta. La password viene salvata in un token di autenticazione, e richiede un vero e proprio computer che sappia come crackare.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"
0
0
0
2015-11-25 07:07:27 +0000

E’ un esempio per eseguire la mazza come amministratore. Per me funziona.

Va così:

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
0
0
2015-11-11 09:50:46 +0000

È possibile utilizzare un'utilità a riga di comando elevate . (link per il download - 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