大人の趣味が行き交う街

スポーツ、読書、プログラミング 等の趣味について書いてます!

バッチファイルを管理者実行するコマンド

おはようございます!

 

本日はバッチファイルを作成していて学んだことを
備忘録の意味合いも込めて記載します。

作成したバッチファイルを管理者実行したい場合、
大体下記の方法があると思います。

①バッチファイルを右クリックして「管理者として実行」
②ショートカットのプロパティの詳細設定で「管理者として実行」にチェックを入れておく
③バッチファイル内に予めコマンドを記載しておく

・・・まあ、大体は②で解決すると思います。
デスクトップに置いておくにせよ、スタートアップに配置するにせよ、
タスクスケジューラで起動させるにせよ、②で解決しますね。
(上手くいかない場合は、それはそれで別の原因があるのでしょう。)

なので、基本的には②を推奨。オールマイティーです。
今回記載する③の方法は飽くまでも②が使えない時の対応策ですね。

~コマンド開始~

@echo off
cd /d %~dp0
for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i
if NOT "%LEVEL%"=="High" (
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 -Verb runas"
exit
)

~コマンド終了~

作成したバッチファイルの上に上記のコマンドを入れてあげましょう。
ちなみに僕が作成したバッチファイルの内容を例として挙げておきます。

~例:開始~

@echo off
cd /d %~dp0
for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i
if NOT "%LEVEL%"=="High" (
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process %~f0 -Verb runas"
exit
)
if not exist C:\Windows\test.txt xcopy /s /e C:\Windows2 C:\

~例:終了~

最下部のコマンドは無視しておいてください。
一応、ここは内容もテスト用に変更しています。

バッチファイルでCドライブ直下にファイルをコピーするには
管理者権限が必要だったので、今回の対応を行ったという経緯ですね。
(ついでに言うと②の方法を取ることが出来なかったから、ですね。)

一見すると、1回コマンドを入れてしまえば後は何も気にする必要が無い、
という点で最も実用的な方法に思えますが、推奨ではない理由があります。

それはバッチファイル実行時に、通常より時間がかかることです。
上記の処理はただのファイルコピーなのですが、これだけでも5~6秒かかります。
管理者実行するための処理に時間を要する訳ですね(^^;


■ショートカットを使用できない場合を考える
②の方法が取れない、つまりショートカットを使用できない状況って
どんな時なんだろう?というのを考えています。

まあ、自宅PCだったら好きなようにカスタマイズすれば良いんでしょうけど、
例えば職場のPCであったり、顧客のPCであったり、自由に操作できない環境だと
②の方法が取れないことはよくあることだと思います。
(そもそも自作バッチを使っていいかは、その環境次第なので悪しからず)

タスクスケジューラを設定できない、スタートアップに配置できない、
というかそもそも新規端末の構築時に使いたいし1回しか使用予定が無い…

上記のような条件だったら③の方法が良いかもしれませんね。
場合によっては③さえも出来ない、という状況も全然あり得ると思います。

そんな時は一体どうしたら良いんでしょうね…笑?

そこまでの状況になってしまえばシステム管理者に
相談するのが最も近道な気がしますね(^^)<ナゲヤリ!

参考になりましたら幸いです。
よろしくお願い致します。