iT邦幫忙

1

批次檔帶系統管理者權限問題

小弟想請教一個問題,我有批次檔需要先取得管理者權限,從網路上找到相關語法,想請問這個語法是做了哪些動作?
::::::::::::::::::::::::::::::::::::::::::::
rem 帶管理者權限
::::::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================

:init
setlocal DisableDelayedExpansion
set cmdInvoke=1
set winSysFolder=System32
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************

ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
if '%cmdInvoke%'=='1' goto InvokeCmd

ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
goto ExecElevation

:InvokeCmd
ECHO args = "/c """ + "!batchPath!" + """ " + args >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "%SystemRoot%%winSysFolder%\cmd.exe", args, "", "runas", 1 >> "%vbsGetPrivileges%"

:ExecElevation
"%SystemRoot%%winSysFolder%\WScript.exe" "%vbsGetPrivileges%" %*
exit /B

:gotPrivileges
setlocal & cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1)

::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::

C:\Windows\System32 這裡就是系統管理者權限
然後執行絕對路徑的檔案
陳軒立 iT邦研究生 5 級 ‧ 2020-03-17 17:30:38 檢舉
看起來是判斷能否寫入 C:\windows\system32
能寫入 => 有權限,不能寫入 => 沒有權限

如果 [不能寫入 => 沒有權限},產生 %temp%\OEgetPriv_%batchName%.vbs 這支vbs,然後呼叫他來提權
石頭 iT邦新手 2 級 ‧ 2020-03-17 17:36:08 檢舉
我是弄一個捷徑指向批次檔 然後捷徑右鍵內容可以設定管理者權限

1 個回答

2
蟹老闆
iT邦大師 1 級 ‧ 2020-03-18 01:46:50

將這行批次指令放到批次檔第一行

%1 Mshta vbscript:CreateObject("Shell.Application").ShellExecute("Cmd.exe","/C ""%~0"" ::","","runas",1)(window.close)&&exit

如果按是繼續執行批次檔,反之取消執行批次檔

ko80434 iT邦新手 5 級 ‧ 2020-03-18 09:09:43 檢舉

已試過,成功了謝謝蟹老闆

我要發表回答

立即登入回答