バッチファイルやPowerShellスクリプトを自動的に管理者として実行させる方法

バッチファイルやPowerShellスクリプトを自動的に管理者として実行させる方法。

バッチファイルやPowerShellスクリプトでは、実行する処理によっては管理者として(管理者権限で)実行しなければならない時がありますが、バッチファイルやPowerShellスクリプトを右クリックしてメニューから「管理者として実行」をクリックする方法は、効率が良いとは言えません。

そんなときは、バッチファイルやPowerShellスクリプト内に自分自身を管理者として再実行する処理を追記しておくことで、バッチファイルやPowerShellスクリプトを普通に実行するだけで、自動的に管理者として再実行させることができます。

そこでここでは、WindowsでバッチファイルやPowerShellスクリプトを自動的に管理者として実行させる方法を紹介します。

バッチファイルの場合

バッチファイルを実行したら自動的に管理者として実行させるには、バッチファイルの先頭に管理者として実行されているかを判別して、管理者として実行されていない場合には、PowerShellコマンドレットで自分自身を管理者として再実行する処理を追記します。

たとえば、openfilesコマンドを使って判別する場合は、以下のように記述します。

@echo off

openfiles > NUL 2>&1
IF ERRORLEVEL 1 (
  powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process %~f0 -Verb runas"
  exit
) 

rem これ以降に、実行したい処理を記述します

よりシンプルに記述したい場合は、以下のように記述もできます。

@echo off

(openfiles > NUL 2>&1) || (powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process %~f0 -Verb runas" & exit)

rem これ以降に、実行したい処理を記述します

PowerShellスクリプトの場合

PowerShellスクリプトを実行したら自動的に管理者として実行させるには、PowerShellスクリプトの先頭に、次の処理を追記します。

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators"))
{
Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs
exit
}

# これ以降に、実行したい処理を記述します

処理内容はバッチファイルの時と同様に、自分自身が管理者として実行されているかチェックし、もし管理者として実行されていない場合は、管理者として再実行しています。

あとがき

参考までに、Windowsでプログラムを管理者として実行する方法は、以下の記事で紹介しています。

Windowsでアプリやプログラムを管理者として実行させる方法
Windowsでアプリやプログラムを管理者として実行させる方法
Windowsでアプリやプログラム、コマンドを管理者として(管理者権限で)実行する方法として、8つの方法を紹介します。