È 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 assicura il lavoro su un ambiente standard, con strumenti standard e allo stesso modo in diversi sistemi Windows. Utilizza diversi comandi standard e integrati di Windows. Non utilizzare altri script esterni. Può essere utilizzato per chiamare qualsiasi programma come amministratore, non solo per gli script Batch. È sufficiente creare un piccolo script, che quindi chiama il programma che richiede l'autorizzazione Administartor. Inseriscilo in qualsiasi cartella PATH di ricerca (da% PATH%).
Per usarlo, è sufficiente inserire la seguente riga (esattamente come) nello script Batch padre, che deve essere eseguito come amministratore. È meglio farlo nella parte superiore del nostro script genitore ed è meglio prima quello, che verrà chiamato tramite la CHIAMATA più avanti, alcuni sotto-script (vedere la spiegazione dettagliata di seguito).
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 non ha i privilegi di amministratore, ad es. per 5 secondi prima di chiamare Batch_Admin impostare la variabile "ShowAdminInfo" sul numero di secondi
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Quindi come funziona:
• Chiama UAC.ShellExecute tramite VBScript per raccogliere le autorizzazioni utente
• Batch esegue lo script o BAT o CMD
• Il chiamante script può avere spazi di nomi lunghi inclusi nella chiamata tra virgolette
• Restituisci tutti i parametri per chiamare lo script master passato dalla riga di comando, come se non ci fosse alcuna trasmissione della chiamata e avviare qualcosa da zero, anche con caratteri speciali, come punti esclamativi (!) E percentuale (%), e anche tra parentesi ()
• Conserva una posizione dello script principale se la chiamata è avvenuta nella directory in cui questo script è il master
• Ausiliario visualizza un messaggio se ci poniamo la variabile "ShowAdminInfo", ad es. per 5 secondi che può impedire il passaggio immediato dei diritti dell'Amministratore fornendo ulteriori informazioni e la possibilità di una decisione informata. Esempi di impostazione che devono essere impostati: SET ShowAdminInfo = 5 Per impostazione predefinita, poiché questa variabile non è definita, non viene visualizzata.
• Lo script sta chiamando anche nel percorso di ricerca del sistema% PATH% e da una risorsa di rete, ad esempio: \ Computer \ share \ test.bat
• Previene incomprensioni nella scrittura dei file ausiliari necessari quando lo script chiama diversi Batch_Admin quasi contemporaneamente. Utilizza il numero casuale compreso tra 1 e 100
• Ma, il migliore è usarlo sullo script principale. Il passaggio ai diritti di amministratore richiede sempre di eseguire nuovamente lo script completamente, in una nuova finestra, in un nuovo ambiente, senza ricorrere alle variabili precedentemente impostate nel nostro script e i valori di queste variabili non sono passati quindi per chiamare come amministratore . Solo lo script verrà eseguito di nuovo.
Di seguito uno script completo Batch_Admin. Informazioni estese su questo sono sul mio sito.
Copia il seguente testo nel Blocco note e salvalo sul disco come: 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) ***