参考 - https://qiita.com/kokosan60/items/a135f0e59e2790db36a3
バッチを利用していて、
毎回管理者権限で実行させるのが面倒くさいと思ったことはないでしょうか。
本記事ではバッチを通常実行するだけで自動で管理者権限で実行するための方法を記載します。
以下コードをバッチの先頭に記載するだけです。
rem バッチの先頭に記載する whoami /priv | find "SeDebugPrivilege" > nul if %errorlevel% neq 0 ( @powershell start-process %~0 -verb runas exit )
●whoami /priv
このコマンドはセキュリティ特権の一覧を表示しますが、
非管理者権限、管理者権限でそれぞれ実行したときに表示される内容が異なります。
管理者権限の方が表示される数が多いです。
これを利用して、現在バッチが非管理者権限、管理者権限のどちらで動作しているかを調べることができます。
●| find "SeDebugPrivilege" > nul
パイプラインを使って、
find "SeDebugPrivilege"
とすることで、管理者権限にしか表示されない"SeDebugPrivilege"を検索させています。
今回は"SeDebugPrivilege"としましたが、他の管理者権限にしかないものであればここはなんでもOKです。
実行結果を表示させないために、> nulでリダイレクトさせています。
●if %errorlevel% neq 0ヒットした場合は
%errorlevel%が0になりますので、管理者権限で実行、0以外の場合は非管理者権限で実行ということがわかります。
●@powershell start-process %~0 -verb runas管理者権限で実行させるコマンドです。
●@ 画面にpowershell start-process %~0 -verb runasを表示させない
●powershellpowershellを実行する
●start-processプロセスを実行する
●%~0バッチで自分自身を示す
●-verb runas管理者権限で実行する
●exit
これを書くことにより、管理者権限で実行したらそこで終了するようにしています。
exitが無かったら、管理者権限での実行終了後、非管理者権限でバッチが実行されてしまい、
思わぬ結果になってしまう可能性があります。
これによってバッチを実行するだけで管理者権限で実行できるようになりました。
管理者権限での実行し忘れ等防止に役立つかと思います。