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

Czy możliwe jest automatyczne uruchomienie pliku wsadowego jako administrator

Zastanawiam się czy możliwe jest automatyczne otwarcie pliku wsadowego jako administrator po dwukrotnym kliknięciu na plik wsadowy, ponieważ polecenia muszą być uruchamiane z prawami administratora.

Uwaga: Wiem już o rozwiązaniu polegającym na kliknięciu prawym przyciskiem myszy na plik i kliknięciu na Run As Administrator, ale nie jest to rozwiązanie automatyczne.

Odpowiedzi (9)

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

Tak, możesz uruchomić plik wsadowy z uprawnieniami administracyjnymi. Niestety, nie można tego zrobić bezpośrednio z pliku wsadowego, który samemu. Musiałbyś najpierw utworzyć skrót tego pliku wsadowego i zmienić jego właściwości, aby to zrobić.

Aby utworzyć skrót, istnieje wiele sposobów, ale najprostszym i najszybszym jest użycie opcji Wyślij do w menu kontekstowym.

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

Oczywiście możesz wysłać skrót tam, gdzie chcesz. Aby podnieść plik wsadowy do rangi administratora, postępuj zgodnie z poniższymi krokami:

  1. Kliknij prawym przyciskiem myszy na skrót, który właśnie utworzyłeś (powinien być na pulpicie lub gdziekolwiek go wyślesz)
  2. W zakładce Skróty kliknij na przycisk Zaawansowane…
  3. Zaznacz pole wyboru Uruchom jako administrator i wciśnij OK zarówno w oknie modalnym, jak i w głównym oknie właściwości.
  4. Uruchomić skrót, klikając go dwukrotnie, a plik wsadowy powinien zostać uruchomiony jako administrator.
33
33
33
2014-12-15 16:55:24 +0000

Tak jak zostało to napisane w odpowiedź przez Bena Gripkę na inne pytanie:

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

na Windows 7

  1. Stwórz skrót do tego pliku wsadowego

  2. Kliknij prawym przyciskiem myszy na skrót do pliku wsadowego

  3. Kliknij przycisk istotności, aby znaleźć pole wyboru do uruchomienia jako administrator

Sprawdzaj zrzut ekranu poniżej

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

Przyjęta odpowiedź rzeczywiście działa. Ale okazało się, że w Windows 7 musiałem znosić okno dialogowe UAC za każdym razem, gdy kliknęliśmy skrót. Ten IMHO znacznie umniejsza “automatycznie” w tym pytaniu!

Wtedy stwierdziłem, że w mojej własnej sytuacji plik .bat, o którym mowa, ma być uruchomiony przez Task Scheduler. W tym przypadku zaznaczenie opcji Run with highest privileges w zakładce General zadania ładnie rozwiązuje problem. .bat jest wtedy uruchamiany jako administrator bez żadnych kłopotów.

PS: Nie zdawałem sobie sprawy, że nie mogę wgrać obrazów w tej odpowiedzi, ‘ponieważ mam ładny mały zrzut ekranu siedzący właśnie teraz przy mnie! A może ja mogę?

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

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)***
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

To również działaSOURCE: 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

Alternatywnie możesz utworzyć drugi plik wsadowy, co pozwoli Ci na uruchomienie wszystkiego jako administrator, przy jednoczesnym wprowadzeniu hasła administratora tylko raz. Hasło jest zapisywane w tokenie uwierzytelniającym i zajmuje trochę prawdziwego komputera, który wie jak się złamać.

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

Jest to przykład uruchomienia nietoperza jako administrator. To działa dla mnie.

To idzie tak:

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

Możesz użyć narzędzia wiersza poleceń elevate . (link do pobrania - 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