2024
October
17
バッチファイルで一般権限で実行後、管理者権限でも動かす方法
社内の各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は管理者権限がないとエラーになるので管理者権限で実行されているかチェックしてます。
管理者権限でなければ管理者権限で実行しなおします。
まとめ
ということで一般権限で実行するバッチと管理者権限で実行するバッチを混ぜたバッチの作り方でした。
完成形を見ると簡単ですが、普段あまりバッチを触らないのでエラー原因の特定に苦労しますね……
このカテゴリの最新記事
2024.02.02
【Laravel】会員・管理者のマルチ認証機能を実装する方法
2024.01.17
growpartによるさくらVPSのパーティション拡張
2023.09.11
【Certbot】CentOS7+Apache2.4にLet’s Encryptで証明書発行
2023.04.19
専門用語を使わずにゼロからわかるSQLインジェクション