コンピュータ関係の備忘録ブログ

とある外資系の会社でITインフラのエンジニアの仕事をしています。自分のためのリマインダとしてコンピュータ関係のことをいろいろ書いているブログなので少々見づらいところもあるかもしれませんが、参照された方の参考になれば幸いです。

バッチファイル実行時UAC昇格ダイアログを出す方法

実行時に管理者権限がないと失敗するバッチファイルを、今までは 右クリック→管理者として実行でやってました。
が、どうにも面倒くさいのでUACの権限昇格を外部プログラムなしで何とかできないか探したところ こちら を見つけたので、メモとして残します

 以下コード

@echo off
REM Auto check & get admin rights

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

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)  
ECHO.
ECHO ***********************************
ECHO Invoking UAC to escalate privilege
ECHO ***********************************

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /b

:gotPrivileges
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
setlocal & pushd .

REM Write your batch script from here
cmd

これで、バッチファイル実行時にUACの昇格ダイアログが立ち上がったあとで、バッチファイルの処理が始まります