プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windowsバッチファイル(.bat)、バッチファイルを管理者権限で起動する
結論から書くと

1.以下の内容を記述したバッチファイルを用意する
@echo off

powershell.exe -Command Start-Process """%1""" -Verb Runas

2.「1.」で用意したバッチファイルの引数として、本来起動したいバッチファイルを指定する

で、やれるっちゃーやれます。
本来起動したいバッチファイルの指定を引数ではなくべた書きにすれば、
「1.」で作成したバッチファイルをダブルクリックして動かすこともできますよ。

なお、記載した内容は「powershell.exe」にパスが通っている前提です。
恐らく最初から通っていると思いますが、通っていない場合は何とかしてください。

それでは詳細を書いていきます。

VMWareを使っているのですが、プロセスが常駐するのが気に喰わなくてですね。
以下の2つのバッチファイルを作って、VMWareを動かすときだけサービスを動かすようにしていたのです。

■vmwarestart.bat
net start "VMware Authorization Service"
net start "VMware DHCP Service"
net start "VMware NAT Service"
net start "VMUSBArbService"

■vmwarestop.bat
net stop "VMware Authorization Service"
net stop "VMware DHCP Service"
net stop "VMware NAT Service"
net stop "VMUSBArbService"

さて、このバッチファイルですが、サービスの開始/停止です。
つまり管理者権限で起動しなくては動きません。
単純に右クリックして「管理者として実行」で良いのですけどね。
うっかりダブルクリックすることが多くて、その度にイライラしていたのです。

ムッキー!(-A-#

というわけで、このバッチファイルを

・ダブルクリックで
・管理者権限で


動かせるように改造することにしました。

どうやってやれば良いのかな(--?

ふむふむ(--)

いろいろ調べたのですが、バッチファイル単体でやるのは無理そうでした。
仕方ないのでWindows PowerShellのお世話になることにします。

こんなバッチファイルを用意してφ(--)

■do_admin.bat
@echo off

powershell.exe -Command Start-Process """%1""" -Verb Runas

コマンドプロンプト上で

do_admin.bat c:\test\test01.bat

のような指定をすれば、引数に指定したバッチファイルが管理者として実行されます。
残念ながらUACの確認ダイアログは出ますけどね。
ダイアログを出さないようにするにはUACを無効化するしかないと思います。

今回はバッチファイルをダブルクリックで起動できるようにしたかったので、
まず元々の「vmwarestart.bat」と「vmwarestop.bat」の名前を
vmwarestart_sub.bat」と「vmwarestop_sub.bat」に変更しました。

vmwarestart_sub.bat
net start "VMware Authorization Service"
net start "VMware DHCP Service"
net start "VMware NAT Service"
net start "VMUSBArbService"

vmwarestop_sub.bat
net stop "VMware Authorization Service"
net stop "VMware DHCP Service"
net stop "VMware NAT Service"
net stop "VMUSBArbService"

その後、先程の内容を記述した「vmwarestart.bat」と「vmwarestart.bat」を
vmwarestart_sub.bat」と「vmwarestop_sub.bat」の同階層に配置して完了です。

■vmwarestart.bat
@echo off
powershell.exe -Command Start-Process """%~dp0%vmwarestart_sub.bat""" -Verb Runas

■vmwarestop.bat
@echo off
powershell.exe -Command Start-Process """%~dp0%vmwarestop_sub.bat""" -Verb Runas

ちなみに「%~dp0%」はバッチファイル自身のパスを意味します。
例えば

%~dp0%vmwarestart_sub.bat

は「vmwarestart.bat」と同じ階層にあるvmwarestart_sub.bat」の指定です。
違う場所に置く場合は、適当に変えてください。

これで改造は完了です。

せっかくなので、もう一度並べて書いておきますねφ(--)

vmwarestart_sub.bat
net start "VMware Authorization Service"
net start "VMware DHCP Service"
net start "VMware NAT Service"
net start "VMUSBArbService"

■vmwarestart.bat
@echo off
powershell.exe -Command Start-Process """%~dp0%vmwarestart_sub.bat""" -Verb Runas

vmwarestop_sub.bat
net stop "VMware Authorization Service"
net stop "VMware DHCP Service"
net stop "VMware NAT Service"
net stop "VMUSBArbService"

■vmwarestop.bat
@echo off
powershell.exe -Command Start-Process """%~dp0%vmwarestop_sub.bat""" -Verb Runas

これで「vmwarestart.bat」「vmwarestop.bat」をダブルクリックすることで
vmwarestart_sub.bat」「vmwarestop_sub.bat」が管理者権限で動くようになり、
「あー、管理者権限で起動するの忘れた!」とイライラすることは無くなりました。

やったねっ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事