欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

讓bat批處理以管理員權限運行的實現(xiàn)方法

 更新時間:2024年07月09日 11:30:37   投稿:mdxy-dxy  
這篇文章主要介紹了讓bat批處理以管理員權限運行的實現(xiàn)方法,需要的朋友可以參考下

在日常運維工作中,為方便對windows用戶進行系統(tǒng)安裝或配置等,使用Windows自帶的批處理(bat文件)是一種最為簡單快速的方法。

但是,批處理腳本不會默認已管理員身份運行,一般情況下,我會將腳本命名為"XXXXXX(請右鍵點擊,用管理員身份運行!).bat",但總有些用戶會忽略這條提示,直接運行,此時由于權限不足,導致腳本運行失敗。我們可以使用一種變通的方法,讓bat啟動時,首先調用vbs腳本,通過vbs腳本,以管理員身份調用該bat的 runas 部分

我們的腳本可以寫在runas 下,這樣就點擊該bat腳本,就可以已管理員身份運行了

1、第一種方法

有的電腦是非管理員登錄,運行程序時,需要提示是否運行運行。解決方法如下:

@ echo off
%1 %2
ver|find "5.">nul&&goto :Admin
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof
:Admin
//在你的bat開頭加上上面的命令即可
//下面是你需要執(zhí)行的命令
set path=%~dp0
echo install mysql service...
echo %path%
cd %path%\bin\
mysqld.exe --remove mysql
mysqld.exe --install mysql
echo start mysql Serviceo
"%SystemRoot%"\system32\net start mysql

2、bat腳本獲取管理員權限

@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"

cd /d %~dp0及其用途

在WINDOWS下命令CD / D%?DP0是什么意思

有人可以幫我理解命令cd /d %~dp0及其用途。 再次dos命令如下

cd /d %~dp0

請幫我弄清楚它的含義。

我們來剖析一下。 有三個部分:

  1. cd – 這是更改目錄命令。
  2. /d – 這個開關讓cd改變驅動器和目錄。 沒有它,你將不得不做cd %~d0 & cd %~p0 。
  3. %~dp0 – 這可以進一步分為三個部分:

%0 – 這表示批處理腳本的第零個參數(shù)。 它擴展到batch file本身的名稱。

%~0 – 在那里解開擴展參數(shù)的雙引號( " )。

%dp0 – d和p有擴展的修飾符。 d強制添加一個驅動器號并添加完整path。

?dp0:d =驅動器,p =path,%0 =此batch file的起始目錄cd /d %~dp0會將path更改為相同的位置,batch file所在的位置

見for /? 更多細節(jié)

寫在bat文件的頂端就可以實現(xiàn)。

3、bat腳本中以管理員權限執(zhí)行命令

在bat腳本文件第一行加上下面命令:

%1 mshta vbscript:CreateObject(“Shell.Application”).ShellExecute(“cmd.exe”,"/c %~s0 ::","",“runas”,1)(window.close)&&exit

僅提權,將上方代碼塊內容復制到bat開頭即可

ver|findstr "[3-5]\.[0-9]\.[0-9]*" 1>nul 2>nul&&goto :st

如需適配xp及更舊的系統(tǒng),將該句提前并將主體放到:st標簽下

fltmc 1>nul 2>nul&& goto :st
set parameters=
:parameter
@if not "%~1"=="" ( set parameters=%parameters% %~1& shift /1& goto :parameter)
set parameters="%parameters:~1%"
mshta vbscript:createobject("shell.application").shellexecute("%~s0",%parameters%,"","runas",1)(window.close)&exit
cd /d %~dp0

因為沒找到把環(huán)境全部傳過去的參數(shù)/命令,就手寫了一下參數(shù)傳遞,不過無法處理引號內有空格的參數(shù),會分成多個參數(shù),需另找辦法

分析

  1. 核心:Shell.ShellExecute 方法 對指定文件執(zhí)行指定操作,以管理員權限運行腳本;也有另一種運行cmd.exe加參數(shù)的寫法
  2. ver命令獲取系統(tǒng)版本號
  3. fltmc命令用于判斷是否已擁有管理員權限 

相關命令/用法

①mshta 命令

mshta vbscript:<commmand>
mshta javascript:<command>

②Shell.ShellExecute 方法(vbs語法)

https://learn.microsoft.com/zh-cn/windows/win32/shell/shell-shellexecute 

iRetVal = Shell.ShellExecute( _
  sFile, _
  [ ByVal vArguments ], _
  [ ByVal vDirectory ], _
  [ ByVal vOperation ], _
  [ ByVal vShow ] _
)

③findstr

findstr [/b] [/e] [/l | /r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/f:<file>] [/c:<string>] [/g:<file>] [/d:<dirlist>] [/a:<colorattribute>] [/off[line]] <strings> [<drive>:][<path>]<filename>[ ...]

注解

所有 findstr 命令行選項都必須位于命令字符串中的 strings 和 filename 之前。

正則表達式使用文本字符和元字符查找文本模式,而不是確切的字符串。

文本字符是在正則表達式語法中沒有特殊含義的字符,它只是匹配該字符的出現(xiàn)。 例如,字母和數(shù)字是文本字符。

元字符是正則表達式語法中具有特殊含義的符號(運算符或分隔符)。

更詳細的可以參考這篇文章

https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/findstr

④符號

&:順序執(zhí)行多條命令,無論上一句命令是否執(zhí)行成功

&&:順序執(zhí)行多條命令,當沒有正常執(zhí)行上一句命令后停止

||: 順序執(zhí)行多條命令,只有上一句命令執(zhí)行錯誤/未執(zhí)行時繼續(xù)

%n:參數(shù),%0為腳本本身

https://learn.microsoft.com/zh-cn/archive/blogs/zainala/using-0-inside-the-batch-file-to-get-the-file-info

1>nul:不顯示命令運行的正確提示

2>nul:不顯示錯誤提示

>:重定向

nul:空設備

@: 命令行回顯屏蔽符

|:命令管道符,將命令結果作為參數(shù)

冒號:字符串截取、標簽

雙冒號:作為注釋使用

4、自動以管理員身份運行批處理(bat)文件

示例代碼如下

@ECHO OFF
setlocal EnableDelayedExpansion
color 3e
title 添加服務配置
 
PUSHD %~DP0 & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas
 
::填寫自己的腳本
 
echo 執(zhí)行完畢,任意鍵退出
 
pause >nul
exit

5、以管理員權限執(zhí)行bat腳本

只需要在你編寫的.bat文件的開頭加上以下腳本,然后雙擊.bat文件即是以管理員權限執(zhí)行

@echo off&color 17
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)

:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 當前運行路徑是:%CD%
echo 已獲取管理員權限

6、如何讓BAT和CMD批處理以管理員身份運行

如何讓BAT和CMD批處理以管理員身份運行?

有些批處理需要很高的權限執(zhí)行才能達到我們所需要的效果,將以下代碼放入批處理最頂部就可以實現(xiàn)以管理員身份運行了。

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
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
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

7、命令行CMD批處理自動以管理員身份運行的正確方法

修正了路徑有空格時的問題

在批處理開頭加上:

適用于無參數(shù)

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

適用于一參數(shù)

%2 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" "^&chr(34)^&"%~1"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

更多參數(shù)的以此類推
運行批處理時多加一個參數(shù)::,這句就不會執(zhí)行
為了兼容8.3短路徑,可把%~0等換成%~s0
理論上是沒問題,但啟動路徑有時不可靠,之后可能還要pushdcd /d

8、bat文件以管理員權限運行的幾種方式

1、創(chuàng)建bat快捷方式,然后右鍵快捷方式-->properties-->advanced-->Run as administrator。
2、下載bat轉成exe工具,將bat轉成exe,然后右鍵exe-->properties-->Compatibility-->Run as administrator。
3、以管理員權限運行cmd,然后dos框中運行相應的bat。

9、BAT批處理提權

給BAT批處理提權,基本都是借助VBS腳本提權

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' EQU '5' (
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
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
rem 后面跟想要執(zhí)行的批處理

將這種方法的原理是:會先執(zhí)行一個命令,該命令需要管理員權限,如果沒有管理員權限就會返回錯誤碼5,然后在系統(tǒng)的Temp文件創(chuàng)建一個VBS腳本,在VBS腳本里用ShellExecute方法以runas的方式開一個進程,runas開的進程會以管理員權限運行。開的那個進程會再執(zhí)行這個批處理,此時因為有權限,會返回0,然后刪除VBS文件,執(zhí)行自己寫的那部分腳本。

會出現(xiàn)的問題:如果需要從外界傳參數(shù)給該bat批處理,需要在下面這個位置傳,但是傳過去的參數(shù)需要遵守VBS里的語法和ShellExecute的參數(shù)格式。如果出現(xiàn)了空格會十分麻煩。

echo UAC.ShellExecute "%~s0", "這里輸入?yún)?shù)", "", "runas", 1 >> "%temp%\getadmin.vbs"

到此這篇關于讓bat批處理以管理員權限運行的實現(xiàn)方法的文章就介紹到這了,更多相關管理員權限運行bat內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論