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

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

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

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

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

バッチファイルの場合

バッチファイルを実行したら自動的に管理者として実行させるには、バッチファイルの先頭に、次の処理を追記します。

@echo off
cd /d %~dp0
for /f "tokens=3 delims=\ " %%i in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%i
if NOT "%LEVEL%"=="High" (
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -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
}

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

処理内容としては、PowerShellスクリプトを実行すると、自分自身が管理者として実行されているかチェックし、もし管理者として実行されていない場合は、管理者として実行しなおしています。

なお、Windows 10のWindows PowerShellでは、デフォルトでPowerShellスクリプトの実行が禁止されているので、事前に「Set-ExecutionPolicy RemoteSigned」などを実行して、PowerShellスクリプトが実行できるよう設定しておく必要があります。

あとがき

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

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