トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

WinBat/runas

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へ。