Posted at

管理者権限でbatを実行したい時にやッた事

More than 1 year has passed since last update.


はじめに

管理者権限が必要なコマンドや領域をbatで弄りたいけど困った時に

ユーザーがマニュアルを読まず、右クリックしてくれない現場の時に

なんかいろいろ面倒になった時に

そんな時に使える管理者権限でのbat実行

ただし、powershellとユーザーへの管理者権限付与が必要です。


管理者権限への昇格方法

powershell start-process 実行対象 -verb runas

batの中でpowershellと最初に入れるとpowershellのコマンドが使えます。

それを使って、新しいプロセスを管理者権限で実行しようというわけです。

簡単な解説

powershell ぱわーしぇる

start-process 新しいプロセス立ち上げよう

実行対象 立ち上げたい対象

-verb runas 管理者で実行する


想定の構成

Cドラの直下にシステム用のディレクトリを作成してもらう必要が出てしまいました。

ダウンロードしたbatを実行してもらい、作成して貰いましょう

Kick.bat

main.bat

が有るとします。

Kick.batには


Kick.bat

powershell start-process main.bat -verb runas


main.batには


main.bat

mkdir c:\temp_SYS


としてkick.batを実行してもらうと管理者権限が必要なCドラの直下にディレクトリ作ったり出来る訳ですね。


でも、2つもbat必要とか微妙だよね

2つのbatとかユーザーが押してくれないしダウンロードさせる時とかに面倒じゃない?

大変そう思います。大方どっちを実行すれば良いのかと問い合わせが来そうです。

そんな訳で、batを一つにまとめてしまいましょう。

ついでにちゃんと成否を判定してダメだったユーザーにはヘルプへ問い合わせを促しましょう。

そんな感じで処理を盛り込み、batの中でbatを生成する様にして一つにまとめたのがこちらです。


main.bat

@echo off

rem 日時を取得する
set now_date=%DATE: =0%
set now_date=%now_date:~0,4%%now_date:~5,2%%now_date:~8,2%

set now_time=%time: =0%
set now_time=%now_time:~0,2%%now_time:~3,2%%now_time:~6,2%

set now_dt=%now_date%%now_time%

rem 場所の移動する
cd /d "%~dp0"

rem 実行したい処理をセットする
set syori_1=mkdir c:\temp_SYS

rem エラーが起きた時の為にエラーレベルを出力する
set syori_err_l=echo %%errorlevel%%

rem セットしたコマンドをbatに出力する
echo %syori_1% >syori.bat
echo %syori_err_l% ^>"%~dp0"err_%now_dt%.log >>syori.bat

rem powershellで管理者権限で出来たbatを実行する
powershell start-process syori.bat -verb runas

rem 処理が終わるまでちょい待つ
@ping localhost -n 5 > nul

rem 出力されたエラーレベルを取得する
set /p err_l_get=<./err_%now_dt%.log

rem エラーレベルで処理の成否を判定
if %err_l_get% == 0 (
echo 処理完了!!!
) else (
echo 処理エラー ヘルプに問い合わせて
goto err_go
)

rem 使い終わったbatとlogを消す
del syori.bat

del err_%now_dt%.log

echo キーボードをどれか押すと閉じる

@pause > nul

exit

:err_go
rem エラー時の処理

rem 使い終わったbatを消す
del syori.bat

echo キーボードをどれか押すと閉じる

@pause > nul

exit



おわり

何処かで誰かの役に立てばいいなぁ