2015/06/19(金)バッチファイルを管理者権限で動かしたい
一番単純なのはファイルを右クリックして「管理者として実行」を選ぶこと、
しかし色々な事情で出来るでけ、単純に実行すれば管理者権限で動くようにしたい
バッチファイル(.ba,.cmd)はプロパティ設定で管理者権限で動かす設定が出来ない
ショートカットなら出来るがリムーバルメディアで実行するのでショートカットではドライブレターが確定出来ないので無理。
バッチからrunasコマンドでバッチファイル自体を呼び出すと言う手も
実行環境ではパスワードがかかっていないのでこれまた使えない
たどりつついた方法はこんな感じ
リンク先が「%SystemRoot%\System32\cmd.exe」のショートカットを作り管理者権限で動くように設定。
バッチファイルに
@echo off :RUNAS whoami /PRIV | FIND "SeLoadDriverPrivilege" > NUL IF not errorlevel 1 GOTO START ECHO 処理を続行するには管理者権限が必要です。 ECHO 管理者モードで再起動します START cmd.lnk /K "%0" %~d0 %~p0 exit :START CD /D %1\%2 ~以下管理者権限でやりたいこと~説明
1行目:エコーを切る。まあこの情報が必要な人には分かりきってることだろう。
2行目:単にラベル
3行目:2つのコマンドからなっているが現在管理者権限があるかを確認する。
「whoami /PRIV」で現在の権限リストを出してFINDコマンドで特定文字列があるかをチェックする
管理者権限でしかないものなら何でも良い、ちなみにデバイスの組み込み権限にしてある。
4行目:FINDの結果を判定 FINDで特定文字列が見つからなければエラーが返ってるのでエラーがなければSTARTレベルへジャンプ
5,6行目:単にメッセージ(別になくてもいい)
7行目:cmd.lnkはショートカットの実体ファイル名。STARTコマンドでそれを実行。
STARTコマンドは対象のファイルをダブルクリックしたのと同じで実行可能ファイルでなくても関連付けで開くことも出来る。
以降引数を与える。%0でバッチファイルを指定してバッチファイルを実行させる。
その後2つ%~d0 %~p0で元のドライブとパスを与えておいて10行目でカレントフォルダをバッチファイルの位置に設定する
ちなみに、このままだと最初から管理者権限があった場合"CD"でおかしな事になるはず、まあその辺は色々・・・
と、以前にこんな感じに作ってて今調べたらもう少しスマートな方法を見つけてしまった(;;;
http://piyopiyocs.blog115.fc2.com/blog-entry-929.html
PowerShellでバッチファイルを管理者権限で呼び出してる。
参照先だと呼び出し用で2ファイル構成だけど上記の権限チェックを使えば1ファイルでいけると思われ(未検証)
まあ、PowerShellはVistaだと非標準らしいのこっちの方法ならVistaでも使えるからいいんじゃんってことで。