4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Windows】GitBashをcontext menuからAdministrator権限付きで実行する

Last updated at Posted at 2019-03-16

はじめに

最近、Windows 10 Proにアップグレードしたことに伴い、ローカルの仮想マシン用のハイパーバイザを、Oracle VirtualBoxからHyper-Vに乗り換えました。

  • 乗り換え後
    GitBash + Vagrant + Hyper-V

  • 乗り換え前
    GitBash + Vagrant + Oracle VirtualBox

これまでVagrantを利用していましたが、これは引き続き利用します。通常、CLIとしてGitBashを使っていたので、これも引き続き利用します。

Hyper-Vのインスタンス等の操作にはAdministrator権限が必要となります。
GitBashを簡単にAdministrator権限で実行させることができるよう、Context Menuにこれを追加しました。

TL;DR

  • Context Menuに任意の項目を追加する確実な手順は、現状、Regeditぐらいしかなさそう(Tweak的なツールはあるにはあるが、完全に任意のコマンドを追加できるものが見当たらない)
  • レジストリの変更は自己責任で
  • 新たなContext Menuは、GitBashのContext Menuと同じ階層に追加した
  • フォルダーの空白部分で右クリックした際のContext Menuに追加する

試した環境

  • Windows 10 Pro 10.0.17763 Build 17763
  • GitBash 2.21.0
  • Vagrant 2.2.4

手順

Regeditを起動する

Start Menuから「regedit」と入力し、Registry Editorを実行します。
User Access Controlのポップアップが表示されるので、実行するコマンドが間違っていないことを確認し、「Yes」を押します。

2019-03-16_20h48_15.png

GitBashのContext Menuを確認する

まずは、Context Menuがどのような構造になっているか確認してみましょう。
以下のKeyをたどってみます。

HKEY_CLASSES_ROOT\Directory\Background\shell\git_shell

2019-03-16_20h58_06.png

この階層には、「(Default)」と「Icon」という2つのValueがあります。
これは、Context Menuに表示させる文字列とアイコンを指定するKeyとなります。

上記Keyの下に「command」というKeyがあるので、さらにたどってみます。

HKEY_CLASSES_ROOT\Directory\Background\shell\git_shell\command

2019-03-16_20h58_11.png

ここに存在する「(Default)」というValueが、実際の実行コマンドになるようです。

これでContext Menuの構造が分かりました。

Administrator権限でコマンドを実行する

まずは、任意のコマンドをAdministrator権限で実行する方法を確認します。

「PowerShell」にはStart-Processというコマンド(?)が存在します。このコマンドに「-Verb RunAs」という引数を指定することで、対象コマンドの権限を昇格して実行することができるようです。

PoerShell 6 -> Start-Process

以下は、コマンドプロンプト(cmd.exe)を、Administrator権限で実行する例です。

> PowerShell Start-Process cmd.exe -Verb RunAs

これで基本形が分かりました。
次に、GitBashを「-Verb RunAs」オプション付きで実行させるコマンドを考えます。
# GitBashのインストールパスが違う場合は、適宜読み替えてください。

> PowerShell Start-Process 'C:\Program Files\Git\git-bash.exe' -Verb RunAs

これで、GitBashの権限を昇格させて実行するコマンドが分かりました。

なお上記のコマンドは、実行直後に一瞬だけPowerShellのウィンドウが表示されてしまいます。
下記のように「-WindowStyle Hidden」を付与してPowerShellコマンドを実行することで、この表示を抑制します。

PowerShell -WindowStyle Hidden -Command "Start-Process 'C:\Program Files\Git\git-bash.exe' -Verb RunAs"

Context Menuに項目を追加する

ではいよいよ、Context Menuに項目を追加します。

Registry Editorで、下記のKeyを開きます。

HKEY_CLASSES_ROOT\Directory\Background\shell

上記のKeyの配下に、以下のKey/Valueを追加していきます。

種別 Key/Value名 説明・内容
Key .\git_shell_administrator|当該Context Menuの一連のkey/Valueを格納するKey。指定する文字列は何でもよい。
Value .\git_shell_administrator\(Default) Context Menuに表示させる文字列。今回は「Git Ba&sh Here with Administrator Privilege」を指定
Value .\git_shell_administrator\Icon Context Menuに表示させるアイコン。今回はGitBashと同一のものを指定。
Key .\git_shell_administrator\command|実際に実行されるコマンドを格納するKey。
Value .\git_shell_administrator\command\(Default) 実行コマンド。

実行コマンドには、先ほど確認したコマンドを入力します。具体的には下記のような文字列になるでしょう。

PowerShell -WindowStyle Hidden -Command "Start-Process 'C:\Program Files\Git\git-bash.exe' -Verb RunAs"

最終的に、下記のようにKey/Valueが設定されるでしょう。
2019-03-16_21h38_25.png
2019-03-16_21h38_29.png

Context Menuを確認する

適当なフォルダを開き、空白部分で右クリックします。
先ほど追加したContext Menuが追加されていることが確認できます。

2019-03-16_21h44_27.png

クリックすると、先ほど指定したコマンドが実行されます。
なお、「-WindowStyle Hidden」引数を指定していても、Context Menuから実行するとPowrShellのウィンドウが一瞬表示されてしまうようです。
格好悪いですが、実害はないので無視します。

おわりに

Context Menuを任意にカスタマイズできるようなツールが見当たらなかったので、とりあえず今回は直接Registry Editorを使って項目を追加しました。

以下のツールが近そうではありましたが、今回の目的にかなう機能はありませんでした。

Winaero
https://winaero.com/blog/command-prompt-administrator-context-menu/
https://forest.watch.impress.co.jp/library/software/winaero_tw/

その他、関連していそうなQiita記事のリンクを貼っておきます。

コマンドプロンプトから管理者権限のコマンドプロンプトに切り替える - Qiita
管理者権限でコマンドプロンプトを起動するショートカット - Qiita

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?