PowerShell における -Verb RunAs は、Start-Process コマンドレットで使用され、指定したプログラムやプロセスを 管理者権限 で実行するためのオプションである。
このオプションを使うことで、通常のユーザー権限ではアクセスできないシステム設定やファイルに対する操作を実行できる。Windows の UAC(User Account Control: ユーザーアカウント制御)が有効になっている場合、-Verb RunAs を使用すると UAC の承認ダイアログが表示される。
Start-Process notepad -Verb RunAs➡️ notepad.exe が管理者権限で起動し、UAC プロンプトが表示される。
Start-Process notepad "C:\Windows\System32\drivers\etc\hosts" -Verb RunAs➡️ システムの hosts ファイルを管理者権限で開き、編集できる。
Start-Process powershell -Verb RunAs➡️ 新しい管理者権限の PowerShell ウィンドウが開く。
-Verb RunAs は 管理者権限への昇格のみを行う。
任意のユーザー(例えば別の標準ユーザー)に切り替えることはできない。
✅ 管理者昇格が必要な場合:
Start-Process cmd -Verb RunAs❌ 特定のユーザーで実行したい場合:
runas コマンドを使用する必要がある。
runas /user:DOMAIN\Username "notepad.exe"PowerShell には -Credential という別の方法で権限を変更するオプションがあるが、-Verb RunAs とは異なる。
| オプション | 管理者昇格 | 別のユーザー指定 |
|---|---|---|
-Verb RunAs |
✅ 可能 | ❌ 不可 |
-Credential |
❌ 不可 | ✅ 可能 |
🔹 -Credential を使用すると、別のユーザーでプロセスを起動できるが、UAC による昇格は行われない。
Start-Process notepad -Credential (Get-Credential)➡️ 別のユーザーの資格情報を入力して実行できるが、管理者権限ではない。
-Verb RunAsを使用すると UAC による昇格プロンプトが表示されるが、Windows の UAC が完全に無効化されている場合は、管理者権限で起動できない可能性がある。
- PowerShell スクリプト内で
Start-Process powershell -Verb RunAsを呼び出すと、新しい管理者 PowerShell ウィンドウが開く。 - これをスクリプト内で適切に処理しないと、無限ループのように新しいウィンドウが開き続ける可能性がある。
✅ 回避策: スクリプト内で既に管理者権限かどうかを判定し、昇格が必要な場合のみ -Verb RunAs を使う。
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Start-Process powershell -Verb RunAs
exit
}-
Microsoft Docs: Start-Process コマンドレット
-
Microsoft Docs: User Account Control (UAC)
-
PowerShell
runasの詳細
-Verb RunAsは、PowerShell のStart-Processコマンドで管理者権限でプロセスを実行するためのオプション。- UAC の確認ダイアログが表示され、管理者権限に昇格する。
- 任意のユーザーに切り替える機能はない(必要なら
runasや-Credentialを使用)。 - 管理者チェックを行ってから実行しないと、スクリプトで無限に新しい PowerShell ウィンドウが開く可能性がある。
このオプションを適切に利用することで、Windows の管理作業をスクリプト化し、安全に権限昇格を行うことができる。