2
1

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 1 year has passed since last update.

gsudoコマンドをつかって、WindowsのPowerShell上でいい感じに管理者権限を利用する

Posted at

WindowsPowerShellなどのターミナルで操作している際に、管理者権限が足りなくてエラーが帰ってきて、改めて管理者権限でターミナルを開き直す事は多々あるかと思います。

そんな際に便利なのが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を利用してインストールします。

image.png

gsudoのv2.0.4がインストールされました。

WingetでインストールするとC:\Program Files (x86)\gsudo\にコマンドがインストールされるようです。

image.png

alias sudo

インストールされたディレクトリを確認すると気が付きますが、gsudoコマンドがインストールされていますが、そのgsudoコマンドへのショートカットとしてsudo.exeも登録されています。

image.png

gsudoコマンドをインストールすると、このsudoショートカットも用意されるため、sudoと入力しても管理者権限への昇格が利用できます。

gsudo で現在のセッションを管理者権限に昇格してみる

How to Use | gsudo (sudo for windows)

使い方は簡単で、gsudoとオプションを付けないで実行すると現在のカレントセッションを権限昇格します。

gsudo

image.png

gsudoコマンドを実行すると、昇格のためのUACダイアログが表示されOKを選択すると現在のカレントセッションが管理者権限に昇格されます。

なお下記コマンドのように、WindowsPrincipalクラスのIsInRoleメソッドで権限昇格できているか確認できるので、こちらのコマンドを実行して権限昇格できているか確認します。

WindowsPrincipal.IsInRole メソッド

[System.Security.Principal.WindowsPrincipal]::new([System.Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)

image.png

実行した結果、Trueが帰ってきているので管理者権限に昇格されている事が確認できます。
(画像では、Oh My Poshでプロンプト表示をカスタマイズしているので、管理者実行を表す雷マークがついている事からも判別できますが)

もしくはgsudoのサブコマンドstatusでカレントセッションのユーザー情報を取得できこちらからも確認できます。

image.png

赤枠のIs Admin がTrueになっていることから、管理者権限になっていることを確認できます。

昇格したセッションから抜けるにはexitすれば抜けられます。

image.png

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コマンドレットを管理者実行してくれます。

資格情報のキャッシュ

Credentials Cache

gsudoでは資格情報をキャッシュする事により、UACダイアログの表示を抑制する事ができます。 が、ドキュメントにも書いてあるように便利ですが何でもかんでも昇格してしまう危険性があるので積極的に使うものでは無いかと思います。


gsudo cache on

gsudo { Write-Host "helloworld" }

gsudo cache off

image.png

上記コマンドを実行すると一度目のgsudoではUACダイアログが表示されますが、2度目のUACダイアログが表示されません。

総評

ふとした時に管理者権限が必要になる作業がありますが、その際にgsudoがインストールされていると便利に利用できるかと思います。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?