Windowsバッチファイル

バッチファイルで管理者として実行する【UAC昇格・runas・自己昇格バッチの作り方】

Windowsバッチファイル
記事内に広告が含まれています。

バッチファイルで管理者権限が必要な処理を行う際の方法を解説します。UAC昇格・runas・自己昇格バッチの3つのアプローチを紹介します。

管理者権限が必要な場面

  • システムフォルダ(C:\Windows等)へのファイル書き込み
  • レジストリのHKEY_LOCAL_MACHINEへの書き込み
  • サービスの起動・停止・インストール
  • ネットワークドライブのシステム全体への割り当て
  • Windowsの設定変更(ファイアウォール等)

管理者権限で実行されているか確認する

@echo off
:: net session で管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
    echo このバッチは管理者権限が必要です。
    echo 右クリック→「管理者として実行」で実行してください。
    pause
    exit /b 1
)
echo 管理者権限で実行中です。
echo 処理を開始します...

runasコマンドで管理者として実行

@echo off
:: 別のユーザーとして実行(パスワード入力が必要)
runas /user:Administrator "cmd /c C:\Scripts\admin_task.bat"

:: ドメイン環境の場合
runas /user:DOMAIN\AdminUser "cmd /c C:\Scripts\admin_task.bat"

自己昇格バッチ(UAC昇格を自動でリクエスト)

@echo off
:: 管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% EQU 0 goto :admin_ok

:: 管理者権限がない場合→UACダイアログを出して自分自身を再実行
echo 管理者権限で再起動します...
powershell -Command "Start-Process cmd -ArgumentList '/c %~dpnx0' -Verb RunAs"
exit /b 0

:admin_ok
:: ここから管理者権限で実行される処理を書く
echo 管理者権限で実行中!
:: 例: サービスの停止
net stop Spooler
echo Spoolerサービスを停止しました
pause

方法の比較

方法特徴向いている場面
右クリック→管理者として実行手動・シンプル自分で使うスクリプト
runas コマンド特定ユーザーとして実行別アカウントの権限が必要な場合
自己昇格バッチ自動でUACダイアログを表示一般ユーザーが使うツール

まとめ

  • net session でバッチが管理者権限で動いているかチェックできる
  • runasで特定ユーザーとしてコマンドを実行できる
  • PowerShell経由のStart-Process -Verb RunAsで自己昇格が実現できる
  • セキュリティ上、必要な箇所だけ管理者権限を使うのが基本
  • 次の記事ではファイル検索・テキスト処理を学ぶ

コメント

タイトルとURLをコピーしました