1
2

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 1 year has passed since last update.

バッチファイルを管理者権限で再起動する方法

Posted at

これをスクリプトの頭に記述する

@REM 管理者権限判定
net session >nul 2>&1
if %ERRORLEVEL% neq 0 (
    @powershell start-process """%~0"^"" -verb runas
    exit
)

簡単な説明

net session >nul 2>&1

コマンド net session は管理者権限が無いとエラーになります。 2>&1 で標準エラーと標準出力をまとめて >nul で非表示にしています。

if %ERRORLEVEL% neq 0

net session の終了コードが %ERRORLEVEL% に入るので、これが0でないなら net session はエラー、すなわち管理者権限でないことがわかります。

@powershell start-process """%~0"^"" -verb runas

バッチファイルでパワーシェルコマンドを実行します。%~0 は実行時引数の0番目、すなわち自身のパスです。psコマンドstart-process の引数 verb に値 runas を設定すると管理者権限で実行できます。

@powershell の仕様がよくわかりませんが "%~0" では失敗し、試行錯誤の結果 """%~0"^"" で通りました。正しい書き方が分かる方がいれば教えてください

exit

管理者権限で再実行したので、以後のスクリプトが多重に実行されないようこのスプリクトを終了します。

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?