Możesz użyć mojego skryptu Batch_Admin, aby automatycznie podnieść administratora do użytku w każdym typie własnego skryptu Batch, lub BAT lub .CMD. Funkcja ta zapewnia pracę w standardowym środowisku, przy użyciu standardowych narzędzi i w ten sam sposób w różnych systemach Windows. Wykorzystuje ona kilka standardowych i wbudowanych poleceń systemu Windows. Nie należy używać żadnych innych zewnętrznych skryptów. Może być użyty do wywołania dowolnego programu jako administrator, a nie tylko skryptu Batch. Wystarczy stworzyć mały skrypt, który następnie wywołuje program, który wymaga uprawnienia Administratora. Umieść to w dowolnym wyszukiwanym folderze PATH (od %PATH%).
Aby go użyć, po prostu włóż następujący wiersz (dokładnie taki sam jak) do jego nadrzędnego skryptu Batch, który ma być uruchomiony jako Administrator. Najlepiej zrobić to na górze naszego skryptu nadrzędnego i najlepiej najpierw, który będzie wywoływany przez CALL dalej, niektóre podskrypty (patrz szczegółowe wyjaśnienie poniżej).
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Można to wstawić wewnątrz dowolnego skryptu dziecięcego, wywoływanego przez składnię CALL. Aby wyświetlić wiadomość, gdy jeszcze nie ma uprawnień administratora, np. przez 5 sekund przed wywołaniem Batch__Admin ustaw zmienną “ShowAdminInfo” na liczbę sekund
SET ShowAdminInfo=5
net session >nul 2>nul&if errorlevel 1 Batch_Admin "%~0" %*
Tak więc jak to działa:
Wywołuje UAC. ShellExecute through VBScript to pick up user permissions
Batch uruchamia skrypt, lub BAT lub CMD
Wywołujący skrypt może mieć długie spacje nazw zawarte w wywołaniu w cudzysłowach
Oddaj wszystkie parametry wywołujące skrypt główny przekazany z linii poleceń, tak jakby nie było transmisji wywołania i rozpocznij coś od początku, także z użyciem znaków specjalnych, jak wykrzykniki (! ) i procentami (%), a także nawiasami ()
Zatrzymuje lokalizację skryptu nadrzędnego, jeśli wywołanie nastąpiło w katalogu, w którym znajduje się skrypt nadrzędny
Auxiliary wyświetla komunikat, jeśli ustawimy przed sobą zmienną “ShowAdminInfo”, np. na 5 sekund, co może uniemożliwić natychmiastowe przejście uprawnień Administratora podając dodatkowe informacje i możliwość świadomej decyzji. Przykładowe ustawienia, które muszą być ustawione: SET ShowAdminInfo=5 Domyślnie, ponieważ zmienna ta nie jest zdefiniowana, to nie wyświetla się.
Skrypt wywołuje również w systemowej ścieżce wyszukiwania % PATH% oraz z zasobów sieciowych, np: \Computer\share\stest.bat
Zapobiega nieporozumieniom w pisaniu niezbędnych plików pomocniczych, gdy skrypt wywołuje kilka Batch_Admin prawie jednocześnie. Używa losowej liczby od 1 do 100
Ale najlepiej użyć jej na skrypcie nadrzędnym. Przejście na prawa administratora zawsze wymaga, żeby skrypt został uruchomiony całkowicie ponownie, w nowym oknie, w nowym środowisku, bez odwoływania się do zmiennych ustawionych wcześniej w naszym skrypcie i wartości tych zmiennych nie przechodziły wtedy do wywołania jako administrator. Tylko skrypt zostanie wykonany ponownie.
Poniżej kompletny skrypt Batch_Admin. Rozszerzone informacje na ten temat znajdują się na mojej stronie.
Skopiuj poniższy tekst do Notatnika i zapisz go na dysku jako: 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)***