
バッチファイルを管理者権限で実行させてみる。
起動してもらったら後は自動でユーザは何も触らずに実行するバッチファイルを作りたい。
管理者権限とは何?
Windowsはユーザアカウント制御(UAC)という機能によって、システムに変更を行う際にはダイヤログが表示され、承認されて初めて実行されるという機能がある。
このダイヤログを表示させないためには「管理者として実行」させることが必要となる。
変な動きをさせないための動きではあるが、バッチファイルを作る際には極力使用者に操作をさせたくないため、管理者として実行させたい。
Powershellから管理者権限で呼び出す
Powershellで別のPowershellコマンドを動かすのは以下
Start-Process -FilePath "powershell" -Verb RunAs
これをバッチファイルで呼び出そうとするとこうなる
Powershell Start-Process -FilePath "powershell" -Verb RunAs
実行すると見事管理者権限でpowerhsellが起動

管理者権限で実行するために、別のバッチから管理者権限で呼び出す
下記の1.batを管理者権限で呼び出したい。

その場合はstart.batから以下のように呼び出せばよい
Powershell Start-Process -FilePath "1.bat" -Verb RunAs
バッチファイルからバッチファイルを開くのどうもきれいではない。
管理者権限で実行されていなかった場合開きなおして、1つのバッチファイルで済ませられないか。
管理者権限で実行されているか判定
下記で管理者権限か否かの判定ができる
実にやってみる。
管理者権限で確認してみる。

管理者権限なしだと

実行後の%errorlevel%で判定ができる。
管理者権限でない場合は開きなおす
今回使うのは「%0」
これで現在動いているバッチの場所をとることができる。
echo %0
上記を実行すると以下のようになる。

これを利用し、
①管理者権限か判定
②権限がない場合は自身を管理者権限で再実行
つまり
バッチファイルを管理者権限で実行させる
以下を作ってみた
openfiles > nul 2>&1
if %errorlevel% == 1 (
Powershell Start-Process -FilePath "%0" -Verb RunAs
pause
)
echo "管理者権限で実行"
pause
これを実行すると
下記が開き、

別窓で以下が開いて、「管理者権限で実行」にたどり着いた。

コマンドをコメント含めて清書すると以下
なお、「chop 65001」はメモ帳で書いたものをバッチファイル化した時に日本語が文字化けするための対策。他の方法もあるけど今回はこれで。
echo off
rem 文字化け対策
chcp 65001
rem 管理者権限でしか開けないopenfilesを実行する
openfiles > nul 2>&1
rem openfilesの結果が1つまり管理者権限がない場合は・・・
if %errorlevel% == 1 (
rem 管理者権限で開きなおす。
Powershell Start-Process -FilePath "%0" -Verb RunAs
pause
exit
)
rem 以降に管理者権限の実行させたいコマンドを記載していく。
pause
実際動かしたいコマンドの前に今回のものを入れることで、管理者権限で実行させることができる。
今回は以上
その他バッチファイルの記事は以下