60
64

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

管理者権限が必要なコマンドや領域を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


##おわり
何処かで誰かの役に立てばいいなぁ

60
64
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
64

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?