批處理判斷是否為管理員權(quán)限如果不是則自動獲取管理權(quán)限
實際應(yīng)用代碼
@ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||( powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
判斷是否以管理員身份運行
這個操作方式比較多,核心思想就是試圖訪問需要管理員身份才可以訪問的資源,可以訪問則有權(quán)限,不可以訪問則沒有權(quán)限
以下三種方式都可以進(jìn)行判斷,可以靈活使用
"%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REG QUERY "HKU\S-1-5-19" net.exe session
使用管理員權(quán)限運行
提供兩種方式
VBS方式
mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)
powershell方式
%~sdpnx0: 指向當(dāng)前批處理文件
powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"
powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT
這是一個PowerShell命令,用于以管理員權(quán)限啟動當(dāng)前執(zhí)行的腳本。
這段代碼的主要部分是 Start-Process '%~sdpnx0' -Verb RunAs,其中 %~sdpnx0 是一個批處理腳本中的變量替換,表示當(dāng)前執(zhí)行的批處理腳本文件的全路徑名。-Verb RunAs 參數(shù)指示 Start-Process 使用提升的權(quán)限運行進(jìn)程。
但是,這個命令在 PowerShell 中并不會直接以管理員權(quán)限運行當(dāng)前腳本,因為 %~sdpnx0 這個變量替換在 PowerShell 中不會被正確解析。在 PowerShell 中,你可以使用 $PSCommandPath 變量來獲取當(dāng)前腳本的完整路徑,然后使用 Start-Process 命令以管理員權(quán)限運行它。
下面是一個修改后的 PowerShell 命令,它可以以管理員權(quán)限運行當(dāng)前腳本:
Start-Process "$PSCommandPath" -Verb RunAs
如果你想要這個命令在執(zhí)行后自動退出,你可以在命令的末尾添加 & exit,如下所示:
Start-Process "$PSCommandPath" -Verb RunAs & exit
請注意,這些命令應(yīng)該在 PowerShell 腳本中使用,而不是在批處理文件中。批處理文件中應(yīng)使用不同的語法。
組合使用
提供兩種組合方式,代碼放于批處理前面使用即可,其他自由組合
:: 方式一 REG QUERY "HKU\S-1-5-19">NUL 2>&1||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&exit) :: 方式二 REG QUERY "HKU\S-1-5-19">NUL 2>&1||mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
自動用管理員身份運行bat
將以下代碼加在開頭
第一種:
@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" ) pushd "%CD%" cd /D "%~dp0"
第二種:
@ echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0" :Admin
更多內(nèi)容可以參考這篇文章 讓bat批處理以管理員權(quán)限運行的實現(xiàn)方法
相關(guān)文章
用bat實現(xiàn)刪除系統(tǒng)腳本調(diào)試程序
用bat實現(xiàn)刪除系統(tǒng)腳本調(diào)試程序...2007-02-02實現(xiàn)每個星期的每一天指定時間關(guān)機(jī)的dos/bat
實現(xiàn)每個星期的每一天指定時間關(guān)機(jī)的dos/bat...2007-07-07批處理中Copy與Xcopy命令的區(qū)別小結(jié)
本文介紹下,批處理腳本中,copy命令與xcopy命令在用法上的一些區(qū)別,感興趣的朋友可以參考下2014-05-05統(tǒng)計每個數(shù)的重復(fù)次數(shù),并按照重復(fù)次數(shù)由高到低排序的批處理
統(tǒng)計每個數(shù)的重復(fù)次數(shù),并按照重復(fù)次數(shù)由高到低排序2009-05-05批處理中setlocal enabledelayedexpansion的作用詳細(xì)整理
設(shè)置本地為延遲擴(kuò)展。其實也就是:延遲變量,全稱延遲環(huán)境變量擴(kuò)展, 想進(jìn)階,變量延遲是必過的一關(guān)!所以這一部分希望你能認(rèn)真看。2011-12-12