社員によってパソコンスキルがさまざまなので「ファイルを右クリックして管理者として実行してください」といってもその通りに実行してくれなかったり、そもそも説明を読み飛ばしていたりとなかなか思った通りに行かないことが多々あります。
そこで、必ず管理者権限で実行されるようにいつもバッチファイルには以下のコマンドを記述しています。
概要
実行したバッチファイルが一般権限で実行された場合、管理者権限で再実行するためのコマンドです。
サンプルコード
@echo off openfiles > NUL 2>&1 if not %ERRORLEVEL% == 0 ( echo 一般権限で実行されたため管理者権限で再実行します。 powershell start-process \"%~f0\" -Verb runas goto exit ) rem 管理者権限で実行したい処理を以下に記述する
詳細
openfiles 利用して管理者権限の有無を確認する方法です。
openfiles は管理者権限がない場合 ERRORLEVELに値を入れます。
0 が管理者権限あり、それ以外の場合は管理者権限がないと判断できますので上記のように記述しています。
管理者として実行するには powershell の start-process を -Verb runas オプション付きで実行します。
powershell start-process 実行対象 -Verb runas
-Verb runas を利用すると実行対象を管理者権限で実行することができます。
今回は自分自身を管理者権限で実行したいので、実行対象には \”%~f0\” を記述しています。
%~f0 はバッチファイル自身のフルパスを展開します。
powershell start-process \"%~f0\" -Verb runas
あとは最後に管理者権限で実行したい処理を記述するだけです。
おすすめ書籍
どこでもインターネットで調べることができますが、社内のセキュリティーポリシーでインターネットを利用できない場所で作業することもありますし、ネットワークトラブルで使用できないこともありますので、買って損はしない一冊です。
Windowsコマンドプロンプトポケットリファレンス
Windows PowerShell ポケットリファレンス
おわりに
かならず管理者権限でバッチファイルを実行するための方法でした。
何かと管理者権限での実行は必要になると思いますので、ぜひ活用してもらえたらと思います。
PowerShellのスクリプトで管理者権限での実行が必要な場合は、以下の記事を参考ください。
ps1ファイルとbatファイルの組み合わせでも問題なければ、この記事のバッチでps1ファイルを実行するだけでも問題なく管理者権限で実行できます。
ダブルクリックだけで実行でき、社内的にはこちらの方が問い合わせが少なかったので、ps1ファイルと起動用のbatファイルを組み合わせた方法で運用しています。