Możesz użyć mojego skryptu Batch_Admin, aby automatycznie podnieść Administratora do użycia w dowolnym typie własnego skryptu Batch, BAT lub .CMD. Ta funkcja zapewnia pracę w standardowym środowisku ze standardowymi narzędziami i w ten sam sposób w różnych systemach Windows. Używa kilku standardowych i wbudowanych poleceń systemu Windows. Nie używaj żadnych innych zewnętrznych skryptów. Może być używany do wywoływania dowolnego programu jako Administrator, a nie tylko skryptów Batch. Wystarczy stworzyć mały skrypt, który następnie wywoła program, który wymaga pozwolenia Administartor. Umieść to w dowolnym folderze ŚCIEŻKA wyszukiwania (od% PATH%).
Aby go użyć, wystarczy wstawić następujący wiersz (dokładnie jak) w jego nadrzędnym skrypcie wsadowym, który ma być uruchamiany jako administrator. Najlepiej jest to zrobić na początku naszego skryptu nadrzędnego i najlepiej najpierw, który będzie wywoływany dalej przez CALL, 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ć do dowolnego skryptu potomnego, wywoływanego przez składnię CALL. Aby wyświetlić komunikat, gdy jest on nadal nie ma uprawnień administratora, np. na 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" %*
Jak to działa:
• Wywołuje UAC.ShellExecute przez VBScript, aby odebrać uprawnienia użytkownika
• Batch uruchamia skrypt lub BAT lub CMD
• Osoba wywołująca skrypt może zawierać w cudzysłowie długie przestrzenie nazw
• Oddaj wszystkie parametry wywołania skryptu głównego przekazanego z wiersza poleceń, tak jakby nie było transmisji wywołania i rozpocznij coś od zera, również ze znakami specjalnymi, takimi jak wykrzykniki (!) I procent (%), a także z nawiasami ()
• Przechowuje główną lokalizację skryptu, jeśli wywołanie miało miejsce w katalogu, w którym ten skrypt jest głównym
• Pomocniczy wyświetla komunikat, jeśli ustawimy przed sobą zmienną „ShowAdminInfo”, np. przez 5 sekund, co może zapobiec natychmiastowemu przejściu uprawnień Administratora, udzielając dodatkowych informacji i możliwości podjęcia świadomej decyzji. Przykłady ustawień, które należy ustawić: SET ShowAdminInfo = 5 Domyślnie, ponieważ ta zmienna nie jest zdefiniowana, nie jest wyświetlana.
• Skrypt wywołuje także ścieżkę wyszukiwania systemu% PATH% i zasoby sieciowe, takie jak: \ Komputer \ udział \ test.bat
• Zapobiega nieporozumieniom w pisaniu niezbędnych plików pomocniczych, gdy skrypt wywołuje kilka Batch_Admin prawie w tym samym czasie. Wykorzystuje losową liczbę od 1 do 100
• Ale najlepsze jest użycie go w skrypcie nadrzędnym. Przejście na uprawnienia administratora zawsze wymaga ponownego uruchomienia skryptu całkowicie, w nowym oknie, w nowym środowisku, bez konieczności odwoływania się do zmiennych ustawionych wcześniej w naszym skrypcie, a wartości tych zmiennych nie zostały następnie przekazane jako administrator . Tylko skrypt zostanie wykonany ponownie.
Poniżej kompletny skrypt Batch_Admin. Rozszerzone informacje na ten temat znajdują się na mojej stronie.
Skopiuj następujący 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) ***