2024
September
05
バッチファイルで一般権限で実行後、管理者権限でも動かす方法
社内の各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.06.14
WITH句を使った最終行に合計行を追加する方法
2024.08.29
ChatGPT APIとC#(またはPython)を活用したAIメール応答システムの構築方法
2023.11.16
【Certbot】SSL証明書更新処理の設定変更方法
2023.07.03
間違いやすいSQLのコマンド5選