Windows
でPowerShell
などのターミナルで操作している際に、管理者権限が足りなくてエラーが帰ってきて、改めて管理者権限でターミナルを開き直す事は多々あるかと思います。
そんな際に便利なのがgsudo
コマンドとなります。
今回はこちらのgsudo
コマンドの紹介。
ドキュメント等
gerardog/gsudo
gsudo (sudo for windows)
gsudoがサポートしているシェルについて
Introduction | gsudo (sudo for windows)
ドキュメントのこちらのページに記載がありますが、2022年11月現在下記のシェルがサポートされています。
- CMD
- PowerShell
- WSL
- Bash for Windows (MSYS2 / MinGW / Git-Bash / Cygwin)
- Yori
- Take Command
- NuShell
本記事ではPowerShell
からgsudo
を利用するケースを対象に説明しています。
インストール
- Scoop
- WinGet
- Chocolatey
各種Windowsパッケージマネージャーに用意されているためこちらからインストールする事ができます。
もしくは、リリースページからダウンロードしてPATHを通すか、下記のコマンドを実行
PowerShell -Command "Set-ExecutionPolicy RemoteSigned -scope Process; [Net.ServicePointManager]::SecurityProtocol = 'Tls12'; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex"
本記事ではWinget
を利用してインストールします。
gsudo
のv2.0.4がインストールされました。
Winget
でインストールするとC:\Program Files (x86)\gsudo\
にコマンドがインストールされるようです。
alias sudo
インストールされたディレクトリを確認すると気が付きますが、gsudo
コマンドがインストールされていますが、そのgsudo
コマンドへのショートカットとしてsudo.exe
も登録されています。
gsudo
コマンドをインストールすると、このsudo
ショートカットも用意されるため、sudo
と入力しても管理者権限への昇格が利用できます。
gsudo で現在のセッションを管理者権限に昇格してみる
How to Use | gsudo (sudo for windows)
使い方は簡単で、gsudo
とオプションを付けないで実行すると現在のカレントセッションを権限昇格します。
gsudo
gsudo
コマンドを実行すると、昇格のためのUACダイアログが表示されOK
を選択すると現在のカレントセッションが管理者権限に昇格されます。
なお下記コマンドのように、WindowsPrincipalクラスのIsInRoleメソッドで権限昇格できているか確認できるので、こちらのコマンドを実行して権限昇格できているか確認します。
WindowsPrincipal.IsInRole メソッド
[System.Security.Principal.WindowsPrincipal]::new([System.Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
実行した結果、Trueが帰ってきているので管理者権限に昇格されている事が確認できます。
(画像では、Oh My Poshでプロンプト表示をカスタマイズしているので、管理者実行を表す雷マークがついている事からも判別できますが)
もしくはgsudo
のサブコマンドstatus
でカレントセッションのユーザー情報を取得できこちらからも確認できます。
赤枠のIs Admin がTrueになっていることから、管理者権限になっていることを確認できます。
昇格したセッションから抜けるにはexit
すれば抜けられます。
hostsファイルを管理者権限に昇格したnotepadで開く
How to Use | gsudo (sudo for windows)
hostsファイルは、権限昇格したnotepadで開いて更新しますが。
下記のようにgusudo
を使ってnotepadを管理者権限で昇格してやるとコマンド一発で権限昇格した状態でhostsファイルを開けます。
gsudo notepad c:\windows\system32\drivers\etc\hosts
gsudoにPowerSHellのスクリプトブロックを渡すとスクリプトブロックを権限昇格して実行
PowerShell
のプロンプト上でgsudo
を利用している場合。
gusdo
コマンドのあとに引数としてスクリプトブロックを渡すと、スクリプトブロックを管理者権限で実行してくれます。
gsudo { Stop-Service <<サービス>> }
上記のように実行するとStop-Service
コマンドレットを管理者実行してくれます。
資格情報のキャッシュ
gsudoでは資格情報をキャッシュする事により、UACダイアログの表示を抑制する事ができます。 が、ドキュメントにも書いてあるように便利ですが何でもかんでも昇格してしまう危険性があるので積極的に使うものでは無いかと思います。
gsudo cache on
gsudo { Write-Host "helloworld" }
gsudo cache off
上記コマンドを実行すると一度目のgsudo
ではUACダイアログが表示されますが、2度目のUACダイアログが表示されません。
総評
ふとした時に管理者権限が必要になる作業がありますが、その際にgsudo
がインストールされていると便利に利用できるかと思います。