トップページソフトウェア系

Windows10 バッチを自動で管理者権限で実行する方法

参考 - 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を表示させない
●powershell
powershellを実行する
●start-process
プロセスを実行する
●%~0
バッチで自分自身を示す
●-verb runas
管理者権限で実行する

これにより、
非管理者権限で実行の場合は管理者権限として再度実行することができます。
※当然、非管理者権限ユーザーで実行した場合は、管理者権限のアカウント、パスワードが要求されます。

●exit

これを書くことにより、管理者権限で実行したらそこで終了するようにしています。
exitが無かったら、管理者権限での実行終了後、非管理者権限でバッチが実行されてしまい、
思わぬ結果になってしまう可能性があります。

これによってバッチを実行するだけで管理者権限で実行できるようになりました。
管理者権限での実行し忘れ等防止に役立つかと思います。

Tweet