PowerShellに限らず、 WindowsではUAC導入以降は管理者権限 (RunAs) が重要な位置づけであることが明示されてきました。 Linuxの世界では、 suやsudoでずいぶん以前から管理されてきたのを考えると、 ようやく感は拭えませんしまだまだ不便なのは否めませんが。
さて、管理者として実行するには、 Explorerからであれば以前紹介したショートカットキー(Shift + Ctrl + その実行ファイル) でもいいでしょう。 また、現在のディレクトリで管理者としてPowerShellを起動するにはファイルメニュー > PowerShell > 管理者と起動と手間です。
それなら、 右クリック (所謂Cointext memu) を拡張して、 現在のディレクトリでPowerShellを起動させてみましょう。
レジストリ の編集 を扱うにあたり
Context Menu = Shell = Registryですね。 ということで、レジストリ編集を扱います。
※ レジストリ編集は、お使いのコンピュータの動作が不安定になる可能性があります。 ※「理解、了承しているヒト」がご自身の責任の上で行ってください。 ※ 私はやり方を紹介できますが、責任はとれませんことをご理解、ご容赦のほどお願いいたします。
対象レジストリキー
以下のキーを起点とします。
HKEY_CLASSES_ROOT\Directory\shell HKEY_CLASSES_ROOT\Directory\Background\shell HKEY_CLASSES_ROOT\Drive
それぞれにrunas/command
キーを作成します。
作成するプロパティ
それぞれのcommandキー に次のValueを作成します。
(default)
HasLUAShield
(default)
には、 Context Menuで表示する名称をいれます。
Open PowerShell as Administartor
PowerShellの起動コマンドはこれです。
"$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'"""
コマンドレットにして実行してみる
Context MenuにElevateされた実行ファイルを渡すコマンドです。
#Requires -Version 3.0 function Set-ElevatedContextMenu{ param( [ValidateNotNullorEmpty()] [PSCustomObject] $AddRegValues = $null ) $RegKeys = @( "directory", "directory\background", "drive" ) foreach ($RegKey in $RegKeys){ $AddRegValues | %{ $ContextMenu = $_.ContextMenus $command = $_.commands $version = $_.versions New-Item -Path "Registry::HKEY_CLASSES_ROOT\$RegKey\shell" -Name runas\command -Force ` | Set-ItemProperty -Name "(default)" -Value $command -PassThru ` | Set-ItemProperty -Path {$_.PSParentPath} -Name '(default)' -Value $ContextMenu -PassThru ` | Set-ItemProperty -Name HasLUAShield -Value '' } } }
実行はこのようにします。 例えば、 PowerShell 64bitをだすならこうです。
$AddRegValues = [PSCustomObject]@{ ContextMenus = "Open Windows PowerShellx64 as Administrator" commands = "$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'""" versions = "PowerShellx64" } Set-ElevatedPowerShellContextMenu -AddRegValues $AddRegValues
これで、Registryにキーが追加されていることが分かります。
ディレクトリ/ドライブ/ディレクトリの空欄右クリックでContext Menuにも追加されていますね。
複数設定できないのか
少し試したんですが、出来なくてぐもも。 どうやるんですかね。