INDEX
管理者で実行する
管理者権限チェック
実行されているバッチファイルが管理者権限(管理者特権)で実行されているか確認する。
openfiles を使う
openfiles を実行するには、管理者特権が必要になる。ない場合はエラーとなるため、それで判断する
REM 管理者権限チェック openfiles > NUL 2>&1 IF ERRORLEVEL 1 ( ECHO 「管理者として実行」で実行してください。 pause )
通常のコマンドプロンプトで実行した場合
C:\Users\username> openfiles エラー: ログオンしているユーザーは管理者特権を持っていません。 C:\Users\username> ECHO %ERRORLEVEL% 1
整合性レベル で確認する
整合性レベルは whoami コマンドで確認でき、これが管理者特権の High であることを確認する。
REM Check for Mandatory Label\High Mandatory Level whoami /groups | find "S-1-16-12288" > NUL IF ERRORLEVEL 1 ( ECHO 「管理者として実行」で実行してください。 pause )
管理者で実行した場合
C:\Windows\system32> whoami /groups | find "Mandatory Label" Mandatory Label\High Mandatory Level ラベル S-1-16-12288
通常のコマンドプロンプトで実行した場合
C:\Users\username> whoami /groups | find "Mandatory Label" Mandatory Label\Medium Mandatory Level ラベル S-1-16-8192
バッチファイルで、UAC昇格ダイアログ表示して管理者で実行する
バッチファイルで管理者特権が必要なコマンドを実行する際に、ユーザーアカウント制御(UAC)の昇格ダイアログを表示して、コマンドを実行する。
runas コマンドは、実行ユーザを指定できるが、管理者特権へ昇格できない(*1)。そのため、管理者特権で実行したい場合、事前に「管理者で実行」で実行するか、Power Shell の Start-Process や JScript/VBscript で ShellExecute を使用して昇格させる必要がある。
※1:ビルドインユーザの Administrator であれば可能なようだが、Windows 10/11 ではデフォルトはアカウントが無効にされている。
powershell -command start-process cmd -verb runas
CreateObject("Shell.Application").ShellExecute "cmd" "args" "", "runas", 1
昇格して自身を実行する
@ECHO OFF
REM 管理者特権が必要な処理を行うバッチ処理
REM 「管理者で実行」されなかった場合、昇格して実行する
REM 管理者権限チェック
openfiles > NUL 2>&1
IF ERRORLEVEL 1 (
ECHO 管理者権限で再実行します。
IF "X%1" == "X" (
powershell -Command Start-Process -FilePath \"%~f0\" -Verb RunAs
) ELSE (
powershell -Command Start-Process -FilePath \"%~f0\" -ArgumentList \"%*\" -Verb RunAs
)
EXIT /B
)
REM 以下、管理者権限で実行したい処理
ECHO 管理者権限で実行中
pause
最終更新時間:2023年06月20日 22時43分40秒 指摘や意見などあればSandBoxのBBSへ。