はじめに
管理者権限が必要なコマンドや領域をbatで弄りたいけど困った時に
ユーザーがマニュアルを読まず、右クリックしてくれない現場の時に
なんかいろいろ面倒になった時に
そんな時に使える管理者権限でのbat実行
ただし、powershellとユーザーへの管理者権限付与が必要です。
##管理者権限への昇格方法
powershell start-process 実行対象 -verb runas
batの中でpowershellと最初に入れるとpowershellのコマンドが使えます。
それを使って、新しいプロセスを管理者権限で実行しようというわけです。
簡単な解説
powershell ぱわーしぇる
start-process 新しいプロセス立ち上げよう
実行対象 立ち上げたい対象
-verb runas 管理者で実行する
##想定の構成
Cドラの直下にシステム用のディレクトリを作成してもらう必要が出てしまいました。
ダウンロードしたbatを実行してもらい、作成して貰いましょう
Kick.bat
main.bat
が有るとします。
Kick.batには
powershell start-process main.bat -verb runas
main.batには
mkdir c:\temp_SYS
としてkick.batを実行してもらうと管理者権限が必要なCドラの直下にディレクトリ作ったり出来る訳ですね。
##でも、2つもbat必要とか微妙だよね
2つのbatとかユーザーが押してくれないしダウンロードさせる時とかに面倒じゃない?
大変そう思います。大方どっちを実行すれば良いのかと問い合わせが来そうです。
そんな訳で、batを一つにまとめてしまいましょう。
ついでにちゃんと成否を判定してダメだったユーザーにはヘルプへ問い合わせを促しましょう。
そんな感じで処理を盛り込み、batの中で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
##おわり
何処かで誰かの役に立てばいいなぁ