タイガーラック クリエイティブブログ
2024
May
30

バッチファイルで一般権限で実行後、管理者権限でも動かす方法

社内の各PCでソフトを入れてもらう時にバッチファイルを配布して実行してもらうだけで行けるようにしたのでその手順をメモ。

動機

今回やりたかったのはバッチファイルでNASからexeファイルをダウンロードして、ローカル環境でexeファイルを実行したい。
(引数の設定とかもあるのでバッチファイルで実行したかった)

引っかかった所

今回詰まったのは
バッチファイルでファイルコピーする場合はバッチを一般権限で実行しないといけないですが、
exeファイルを実行する時は管理者権限でバッチを実行しないといけないこと。

ファイルコピーを管理者権限で実行するとユーザーが変わるのでアクセス権限が変わります。
なのでファイルコピーは一般権限で行いつつ、exeファイル実行時は管理者権限で実行したいので、
管理者権限で実行するファイルを別のバッチファイルにして呼ぶようにしました。

コード

一般権限のバッチファイル.dat
@echo off
copy C:\test\管理者実行.bat C:\temp\管理者実行.bat
copy C:\test\abc.exe C:\temp\abc.exe

REM 管理者権限で実行するため別ファイルでcall
call C:\temp\管理者実行.bat

echo 完了しました。
pause
exit
管理者実行.bat
@echo off
REM 管理者権限でないなら管理者権限で実行しなおす
net session >NUL 2>nul
if %errorlevel% neq 0 (
 @powershell start-process %~0 -verb runas
 exit
)

call C:\temp\abc.exe
echo 実行しました。
exit

net sessionは管理者権限がないとエラーになるので管理者権限で実行されているかチェックしてます。
管理者権限でなければ管理者権限で実行しなおします。

まとめ

ということで一般権限で実行するバッチと管理者権限で実行するバッチを混ぜたバッチの作り方でした。
完成形を見ると簡単ですが、普段あまりバッチを触らないのでエラー原因の特定に苦労しますね……

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.