Operations Lab.

Archive for 11月 2014

PowerShell からプログラムを管理者権限で起動する

leave a comment »

PowerShell を起動する際、「管理者として実行」するのを忘れてしまい、管理者権限が必要なコマンドレットやプログラムを実行して気付いたときなどに。

PowerShell を操作している途中で、スタート画面やタスクバーにピン留めされたアイコンをマウスで右クリックして「管理者として実行」するのは面倒です。こんな時は、Start-Process のパラメータ -Verb に RunAs を指定すると、管理者権限で新しいプロセスを起動してくれます。(UAC のプロンプトが迂回できるわけではありません。)

PS C:\> Enable-PSRemoting
Enable-PSRemoting : アクセスが拒否されました。このコマンドレットを実行するには、[管理者として実行] オプションを使用して
 Windows PowerShell を起動してください。
発生場所 行:1 文字:1
+ Enable-PSRemoting
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Enable-PSRemoting], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.EnablePSRemotingCommand

PS C:\>
PS C:\> Start-Process powershell.exe -Verb RunAs
PS C:\>

新しい PowerShell は、新しいウィンドウで起動します。(もともとのウィンドウと異なる権限レベルなので当然ですが。)

ちなみに、-Verb の値として RunAs を指定できるのは、基本的に .bat や .exe などのみです。あるプログラム(やファイル)について、どのような Verb (動詞)を指定できるかは、以下のコマンドで確認できます。

PS C:\> $psinfo = New-Object System.Diagnostics.ProcessStartInfo -Args PowerShell.exe
PS C:\> $psinfo.Verbs
open
runas
runasuser

※利用可能な Verb は OS によって異なる場合があります。また、大文字小文字は区別されません。

バッチファイル(.bat)だと以下の様になります。

PS C:\> $psinfo = New-Object System.Diagnostics.ProcessStartInfo -Args "D:\Data\PowerShell\test.bat"
PS C:\> $psinfo.Verbs
edit
open
print
runas
runasuser

なお、RunAsUser を指定すると、「別のユーザーとして実行」プロンプトが開き、入力した資格情報でプロセスが開始されます。

PS C:\> Start-Process powershell.exe -Verb runasuser

runasuser-201411-01

Written by kazu

2014/11/15 at 19:56

カテゴリー: PowerShell

Tagged with , ,