見出し画像

バッチファイルを管理者権限で実行させてみる。

起動してもらったら後は自動でユーザは何も触らずに実行するバッチファイルを作りたい。

管理者権限とは何?

Windowsはユーザアカウント制御(UAC)という機能によって、システムに変更を行う際にはダイヤログが表示され、承認されて初めて実行されるという機能がある。

このダイヤログを表示させないためには「管理者として実行」させることが必要となる。

変な動きをさせないための動きではあるが、バッチファイルを作る際には極力使用者に操作をさせたくないため、管理者として実行させたい。

Powershellから管理者権限で呼び出す

Powershellで別のPowershellコマンドを動かすのは以下

Start-Process -FilePath "powershell" -Verb RunAs

これをバッチファイルで呼び出そうとするとこうなる

Powershell Start-Process -FilePath "powershell" -Verb RunAs

実行すると見事管理者権限でpowerhsellが起動

画像1

管理者権限で実行するために、別のバッチから管理者権限で呼び出す

下記の1.batを管理者権限で呼び出したい。

画像2

その場合はstart.batから以下のように呼び出せばよい

Powershell Start-Process -FilePath "1.bat" -Verb RunAs

バッチファイルからバッチファイルを開くのどうもきれいではない。
管理者権限で実行されていなかった場合開きなおして、1つのバッチファイルで済ませられないか。

管理者権限で実行されているか判定

下記で管理者権限か否かの判定ができる

実にやってみる。

管理者権限で確認してみる。

画像4

管理者権限なしだと

画像4

実行後の%errorlevel%で判定ができる。

管理者権限でない場合は開きなおす

今回使うのは「%0」
これで現在動いているバッチの場所をとることができる。

echo %0

上記を実行すると以下のようになる。

画像5

これを利用し、
①管理者権限か判定
②権限がない場合は自身を管理者権限で再実行

つまり

バッチファイルを管理者権限で実行させる

以下を作ってみた

openfiles > nul 2>&1
if %errorlevel% == 1 (
Powershell Start-Process -FilePath "%0" -Verb RunAs
pause
)
echo "管理者権限で実行"
pause

これを実行すると
下記が開き、

画像6

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

画像7

コマンドをコメント含めて清書すると以下
なお、「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

実際動かしたいコマンドの前に今回のものを入れることで、管理者権限で実行させることができる。

今回は以上

その他バッチファイルの記事は以下


この記事が気に入ったらサポートをしてみませんか?