これをスクリプトの頭に記述する
@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
管理者権限で再実行したので、以後のスクリプトが多重に実行されないようこのスプリクトを終了します。