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