Help us understand the problem. What is going on with this article?

管理者権限で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


おわり

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

resolver
広く浅くな技術を広く深くして行きたい今日此の頃 WindowsMRを使って動画作ってみたりしてます。 https://www.youtube.com/channel/UCobRI1Pcw5P7di7vwf_1OWA?view_as=subscriber
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away