Windowsでは、システム設定の変更やファイルの移動・削除といった処理には管理者権限が必要です。バッチファイルでこれらの操作を自動化しようとした場合、「ユーザーアカウント制御(UAC)」の確認画面が表示され、処理が止まってしまうことがあります。
この記事では、バッチファイルを管理者権限で自動実行する方法として、次の2つのアプローチを紹介します:
- バッチファイル内で自分自身を管理者権限で再実行する方法
- タスクスケジューラを使って管理者として定時・起動時に実行する方法
1. バッチファイル内で自動的に管理者権限に昇格する方法
以下のコードをバッチファイルの冒頭に追加することで、通常のダブルクリックでも管理者権限で再起動されるように構成できます。
@echo off
:: 管理者権限で再実行する
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo 管理者権限が必要です。再起動します...
powershell start -verb runas '%~f0'
exit /b
)
echo 管理者として実行されています。
:: 以下に実際の処理を書く
ポイント:
cacls.exe
でアクセス確認を行い、失敗時にPowerShellで再実行powershell start -verb runas
でUACを通過し昇格- すでに管理者であればそのまま続行
ただしこの方法では、UACの確認ダイアログは表示されます。完全に無人での自動化が必要な場合は、次に紹介するタスクスケジューラを使った方法が推奨されます。
2. タスクスケジューラで管理者権限バッチを自動実行する
UACを完全に回避して管理者権限のまま自動実行したい場合は、Windowsタスクスケジューラに登録し、管理者権限付きで実行させるのが最も安全で確実な方法です。
2-1. タスクの作成手順(GUI)
- 「タスクスケジューラ」を起動
- 右側の「基本タスクの作成」または「タスクの作成」をクリック
- 任意の名前を入力(例:AdminBatch)
- 「トリガー」タブで「ログオン時」や「毎日」などを設定
- 「操作」タブでバッチファイルを指定
- 「全般」タブで「最上位の特権で実行する」にチェックを入れる
- 「OK」で保存
2-2. コマンドラインでタスクを登録する方法
以下のコマンドを使えば、バッチファイルからタスクを登録することも可能です。
schtasks /create /tn "AdminBatch" /tr "C:\path\to\your_script.bat" /sc onlogon /rl highest
/rl highest
により「管理者として実行」が設定され、UACの確認なしでバッチが実行されます。
3. 注意点と運用上のコツ
- バッチが終了後もコマンドプロンプトが残る場合は
exit
を明示的に記述 - ログ出力処理やエラーハンドリングを入れておくと後からの検証が楽になります
- 複数ユーザーで利用する場合、ドメイン権限やグループポリシーの影響も考慮
まとめ
バッチファイルを管理者権限で確実に自動実行するためには、次の2つのアプローチを理解しておくことが重要です。
- PowerShellで自分自身を「管理者として再実行」する方法
- タスクスケジューラに登録して「UACを通さず自動実行」する方法
用途や環境に応じてこれらを使い分けることで、信頼性の高い自動処理を実現できます。