Skip to content

Instantly share code, notes, and snippets.

@TakashiSasaki
Created February 28, 2025 08:48
Show Gist options
  • Select an option

  • Save TakashiSasaki/26eaaefbb6252b8fed7a458ee0977cfa to your computer and use it in GitHub Desktop.

Select an option

Save TakashiSasaki/26eaaefbb6252b8fed7a458ee0977cfa to your computer and use it in GitHub Desktop.

PowerShell の -Verb RunAs に関する詳細解説

1. -Verb RunAs とは?

PowerShell における -Verb RunAs は、Start-Process コマンドレットで使用され、指定したプログラムやプロセスを 管理者権限 で実行するためのオプションである。

このオプションを使うことで、通常のユーザー権限ではアクセスできないシステム設定やファイルに対する操作を実行できる。Windows の UAC(User Account Control: ユーザーアカウント制御)が有効になっている場合、-Verb RunAs を使用すると UAC の承認ダイアログが表示される。


2. 基本的な使用方法

PowerShell から管理者権限で Notepad を開く

Start-Process notepad -Verb RunAs

➡️ notepad.exe が管理者権限で起動し、UAC プロンプトが表示される。

特定のファイルを管理者権限で編集する

Start-Process notepad "C:\Windows\System32\drivers\etc\hosts" -Verb RunAs

➡️ システムの hosts ファイルを管理者権限で開き、編集できる。

管理者権限の PowerShell を起動する

Start-Process powershell -Verb RunAs

➡️ 新しい管理者権限の PowerShell ウィンドウが開く。


3. -Verb RunAs の動作と制限

(1) -Verb RunAs は管理者昇格専用

-Verb RunAs管理者権限への昇格のみを行う。 任意のユーザー(例えば別の標準ユーザー)に切り替えることはできない。

管理者昇格が必要な場合:

Start-Process cmd -Verb RunAs

特定のユーザーで実行したい場合: runas コマンドを使用する必要がある。

runas /user:DOMAIN\Username "notepad.exe"

(2) -Credential との違い

PowerShell には -Credential という別の方法で権限を変更するオプションがあるが、-Verb RunAs とは異なる。

オプション 管理者昇格 別のユーザー指定
-Verb RunAs ✅ 可能 ❌ 不可
-Credential ❌ 不可 ✅ 可能

🔹 -Credential を使用すると、別のユーザーでプロセスを起動できるが、UAC による昇格は行われない。

Start-Process notepad -Credential (Get-Credential)

➡️ 別のユーザーの資格情報を入力して実行できるが、管理者権限ではない。


4. -Verb RunAs を利用する際の注意点

(1) UAC が無効だと昇格しない

  • -Verb RunAs を使用すると UAC による昇格プロンプトが表示されるが、Windows の UAC が完全に無効化されている場合は、管理者権限で起動できない可能性がある。

(2) スクリプト内で -Verb RunAs を実行すると二重起動の可能性

  • 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
}

5. -Verb RunAs に関する参考文献

  1. Microsoft Docs: Start-Process コマンドレット

  2. Microsoft Docs: User Account Control (UAC)

  3. PowerShell runas の詳細


まとめ

  • -Verb RunAs は、PowerShell の Start-Process コマンドで管理者権限でプロセスを実行するためのオプション
  • UAC の確認ダイアログが表示され、管理者権限に昇格する。
  • 任意のユーザーに切り替える機能はない(必要なら runas-Credential を使用)。
  • 管理者チェックを行ってから実行しないと、スクリプトで無限に新しい PowerShell ウィンドウが開く可能性がある。

このオプションを適切に利用することで、Windows の管理作業をスクリプト化し、安全に権限昇格を行うことができる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment