Có thể tự động chạy một tệp bó với tư cách quản trị viên


48

Tôi tự hỏi liệu có thể tự động mở một tệp bó với tư cách quản trị viên khi bạn nhấp đúp vào tệp bó, bởi vì các lệnh cần phải được chạy với quyền quản trị.

Lưu ý: Tôi đã biết về giải pháp nhấp chuột phải vào tệp và nhấp vào Run As Administrator, nhưng đây không phải là giải pháp tự động.



Tôi đã có thể làm điều này để làm việc cho tôi: stackoverflow.com/a/13811519/27928
Rohit

2
Làm thế nào là hai nhấp chuột trái tự động hơn một nhấp chuột trái và một nhấp chuột phải?
jiggunjer

Câu trả lời:


44

Có, bạn có thể chạy một tệp bó với quyền quản trị. Thật không may, bạn không thể tự làm điều này trực tiếp từ tệp bó. Trước tiên, bạn cần tạo một lối tắt của tệp bó đó và thay đổi các thuộc tính cho lối tắt đó để làm cho công việc này.

Để tạo một lối tắt, có nhiều cách nhưng cách đơn giản nhất và nhanh nhất là sử dụng tùy chọn Gửi đến trong menu ngữ cảnh.

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

Tất nhiên bạn có thể gửi phím tắt đến bất cứ nơi nào bạn muốn. Để nâng cao tệp bó để chạy với tư cách quản trị viên, hãy làm theo các bước dưới đây:

  1. Nhấp chuột phải vào phím tắt bạn vừa tạo (nên ở trên màn hình nền hoặc bất cứ nơi nào bạn gửi nó)
  2. Trong tab Phím tắt, nhấp vào nút Nâng cao ....
  3. Chọn hộp kiểm Chạy với tư cách quản trị viên và nhấn OK cho cả cửa sổ phương thức và cửa sổ thuộc tính chính.
  4. Chạy phím tắt bằng cách bấm đúp vào nó và tệp bó sẽ chạy với tư cách quản trị viên.

1
Bạn luôn có thể buộc tệp bó gọi phím tắt và yêu cầu phím tắt vượt qua một tham số để biết không gọi tắt. Bạn sẽ chèn một cái gì đó như if "%~1" == "" start %USERPROFILE%\Desktop\Shortcut.lnk && GOTO :EOFngay bên dưới @echo off, và tạo liên kết phím tắt program.bat athay vì chỉ program.bat.
trlkly

2
Ifedi viết "Câu trả lời được chấp nhận [câu trả lời này từ Tech1337] thực sự hoạt động. Nhưng tôi thấy rằng trong Windows 7, tôi đã phải chịu đựng hộp thoại UAC mỗi lần nhấp phím tắt." <- Mặc dù có người khác nói rằng nó hoạt động mà không có UAC
barlop

Đối với tôi, phím tắt không chạy trong thư mục hiện tại khi nhấp đúp, mặc dù .bat có. Ngay cả với thuộc tính "Bắt đầu trong:" trên phím tắt đã điền. Vì vậy, hãy chắc chắn .bat của bạn chỉ định đường dẫn tệp đầy đủ.
Rob Mosher

29

Như được đăng trong một câu trả lời của Ben Gripka cho một câu hỏi khác:

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"
:--------------------------------------

Vâng, tôi đã tìm thấy cái này và đang sử dụng nó. Dù sao đi nữa cũng xin cám ơn!
Antp

Thực chất những gì tôi đang tìm kiếm. Hy vọng có một cách để làm điều này mà không cần sử dụng VB?
Đầu bếp Pharaoh

@ChefPharaoh điều này tạo ra một bàn điều khiển nâng cao để chạy tệp bó. Bạn có thể làm tương tự với một tập lệnh powershell.
jiggunjer

Đây là câu trả lời tốt nhất cho tôi.
kasperhj

4

Câu trả lời được chấp nhận thực sự làm việc. Nhưng tôi thấy rằng trong Windows 7, tôi phải chịu đựng hộp thoại UAC mỗi lần bấm phím tắt. IMHO này làm giảm đáng kể từ "tự động" trong câu hỏi này!

Sau đó, tôi thấy rằng trong tình huống của riêng mình, .battệp được đề cập sẽ được chạy bởi Trình lập lịch tác vụ. Trong trường hợp này, kiểm tra Run with highest privilegestùy chọn trên Generaltab của tác vụ, sẽ xử lý vấn đề này một cách độc đáo. Sau .batđó được chạy như quản trị viên mà không gặp rắc rối.

Tái bút: Tôi không nhận ra mình không thể tải lên hình ảnh về câu trả lời này, vì tôi có một ảnh chụp màn hình nhỏ xinh đang ngồi ngay với tôi! Hay tôi có thể?


2
Nếu bạn thêm liên kết đến hình ảnh, ai đó sẽ nội tuyến chúng cho bạn.
Ramhound

@Ramhound. Thêm liên kết đến hình ảnh? Hình ảnh trên máy tính để bàn của tôi, không phải ở đâu đó trực tuyến. Hoặc, chắc chắn tôi đang thiếu một cái gì đó?
Ifedi Okonkwo

Đúng; Bạn tải chúng lên; Bạn không thể sắp xếp các ảnh chụp màn hình vào câu trả lời của bạn.
Ramhound

Hoặc là nút tải lên không có ở đó, hoặc tôi đã bị mù một nửa ngày hôm qua! Tôi chắc chắn đó là cái sau. Nhưng dù sao, tôi đã hoàn thành việc tải lên tệp rất độc đáo, chỉ cần nói rằng tôi cần một đại diện 10 người để đăng ảnh. Cảm ơn, mặc dù.
Ifedi Okonkwo

Bạn vẫn có thể đặt liên kết trong câu trả lời mặc dù.
Ramhound

4

trên Windows 7

  1. Tạo lối tắt đến tệp Batch đó

  2. Nhấp chuột phải vào tệp phím tắt

  3. Nhấp vào nút trước để tìm hộp kiểm chạy với tư cách quản trị viên

Kiểm tra ảnh chụp màn hình bên dưới

Ảnh chụp màn hình


1
Câu nói của bạn giống như câu trả lời được chấp nhận.
Antp

Có, tôi chỉ muốn tạo một danh sách đơn giản với ảnh chụp màn hình cho mọi người đang vội.
fedmich

3
Nếu ai đó đang vội, tôi nghi ngờ rằng họ sẽ cuộn xuống phía dưới để tìm câu trả lời. Dù sao đi nữa
Antp 11/215

3

Bạn có thể sử dụng tập lệnh Batch_Admin của tôi để tự động nâng Quản trị viên để sử dụng trong mọi loại tập lệnh riêng của Batch hoặc BAT hoặc .CMD. Chức năng này đảm bảo hoạt động trên môi trường tiêu chuẩn, với các công cụ tiêu chuẩn và theo cùng một cách trong các hệ thống Windows khác nhau. Nó sử dụng một số lệnh Windows tiêu chuẩn và tích hợp. Không sử dụng bất kỳ tập lệnh bên ngoài khác. Nó có thể được sử dụng để gọi bất kỳ chương trình nào là Quản trị viên, không chỉ các tập lệnh Batch. Nó đủ để tạo ra một tập lệnh nhỏ, sau đó gọi chương trình yêu cầu quyền quản trị. Đặt cái này trong bất kỳ thư mục PATH tìm kiếm nào (từ% PATH%).

Để sử dụng nó, bạn chỉ cần chèn dòng sau (chính xác là) vào tập lệnh Batch gốc của nó, được chạy với tư cách Quản trị viên. Điều này được thực hiện tốt nhất ở đầu tập lệnh gốc của chúng tôi và tốt nhất là trước tiên, sẽ được gọi thông qua CALL hơn nữa, một số tập lệnh phụ (xem giải thích chi tiết bên dưới).

net session >nul 2>nul&if errorlevel 1  Batch_Admin "%~0" %*

Điều này có thể được chèn vào bên trong bất kỳ tập lệnh con nào, được gọi bằng cú pháp CALL. Để hiển thị một thông báo trong khi nó vẫn không có đặc quyền Quản trị viên, vd. trong 5 giây trước khi gọi Batch_Admin, đặt biến "ShowAdminInfo" trên số giây

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

Vì vậy, làm thế nào nó hoạt động:

• Gọi UAC.ShellExecute thông qua VBScript để nhận quyền của người dùng

• Batch chạy tập lệnh, hoặc BAT hoặc CMD

• Trình gọi tập lệnh có thể có một không gian tên dài được bao gồm trong cuộc gọi trong dấu ngoặc kép

• Trả lại tất cả các tham số gọi tập lệnh chính được truyền từ dòng lệnh, như thể không có truyền cuộc gọi và bắt đầu một cái gì đó từ đầu, cũng với các ký tự đặc biệt, như dấu chấm than (!) Và phần trăm (%), và cả với dấu ngoặc đơn ()

• Giữ một vị trí tập lệnh chính nếu cuộc gọi diễn ra trong thư mục nơi tập lệnh này là chủ

• Phụ trợ hiển thị thông báo nếu chúng ta tự đặt trước biến "ShowAdminInfo", vd. trong 5 giây có thể ngăn chặn ngay lập tức các quyền của Quản trị viên cung cấp thêm thông tin và khả năng có quyết định sáng suốt. Ví dụ về cài đặt phải được đặt: SET ShowAdminInfo = 5 Theo mặc định, vì biến này không được xác định, nó không hiển thị.

• Tập lệnh cũng đang gọi trong đường dẫn tìm kiếm hệ thống% PATH% và từ tài nguyên mạng, chẳng hạn như: \ Computer \ share \ test.bat

• Ngăn chặn sự hiểu lầm trong việc viết các tệp phụ trợ cần thiết khi tập lệnh gọi một số Batch_Admin gần như cùng một lúc. Nó sử dụng số ngẫu nhiên từ 1 đến 100

• Nhưng, tốt nhất là sử dụng nó trên tập lệnh gốc. Việc chuyển đổi sang quyền Quản trị viên luôn yêu cầu bạn chạy lại tập lệnh hoàn toàn, trong một cửa sổ mới, trong một môi trường mới, không cần truy vấn các biến được đặt trước đó trong tập lệnh của chúng tôi và các giá trị của các biến này không được chuyển qua để gọi là Quản trị viên . Chỉ cần kịch bản sẽ được thực hiện lại.

Bên dưới một kịch bản hoàn chỉnh Batch_Admin. Thông tin mở rộng về điều này là trên trang web của tôi.

Sao chép văn bản sau vào Notepad và lưu nó vào đĩa dưới dạng: 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)  ***

Tôi nghĩ rằng điều này tương tự hoặc giống hệt với câu trả lời ở trên: superuser.com/a/852877/375935
jiggunjer

1

Ngoài ra, bạn có thể tạo tệp bó thứ hai, điều này có thể cho phép bạn chạy mọi thứ với tư cách quản trị viên, trong khi chỉ nhập mật khẩu quản trị viên một lần. Mật khẩu được lưu trong mã thông báo xác thực và cần một số máy tính thực sự biết cách bẻ khóa.

runas /savecred /user:(domain)\(admin user) "(file path to exe,bat,whatever)"

1
@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

Điều này cũng hoạt động NGUỒN: https://social.technet.microsoft.com/Forums/windows/en-US/bc8a4561-d97e-4339-9b1c-9b90e54a7f92/request-elevation-inside-cmdbatch-file


Bạn có thể giải thích giải pháp của bạn?
scai

1
Một phiên bản khác của superuser.com/a/852877/375935
jiggunjer

0

Bạn có thể sử dụng một tiện ích dòng lệnh elevate. (liên kết tải xuống - 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

Điều này không mang đến một nỗi sợ hãi UAC sao?
Antp

điều đó mang đến ... tuy nhiên, nó tốt hơn là không có gì (nhìn thấy "quyền truy cập bị từ chối" ..)
T.Todua

Tuy nhiên, không thực sự "tự động"
Antp

0

Đó là một ví dụ để chạy bat như quản trị viên. Nó làm việc cho tôi.

Nó như thế này:

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

Chào mừng bạn đến với Siêu người dùng! Trong khi điều này có thể trả lời câu hỏi, nó sẽ là một câu trả lời tốt hơn nếu bạn có thể cung cấp một số lời giải thích tại sao nó làm như vậy.
DavidPostill

Một biến thể khác của superuser.com/a/852877/375935
jiggunjer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.