PowerShell で sudo 的なことをしたい

Windows Terminal 1.13 から管理者権限に昇格できるプロファイルを定義できるとはいえ、いちいち管理者権限が付与されたウィンドウを立ち上げたくはない。POSIXのように sudo <command> で同一ウィンドウ(タブ)で実行したい。

これには gsudo というそのまんまなことができるものがあるので導入する。winget を導入しているのであれば、以下でインストールできる。

winget install gerardog.gsudo

導入後は以下のように gsudo <command> で管理者権限で任意のコマンドを実行できる。

gsudo ls

しかし、$profile は読んでくれないようなので、$profile に定義されている関数などを実行したい場合は、以下のようにする必要がある。

gsudo "pwsh.exe -Login -Command { <command> }"

毎回これを入力するのは面倒くさいので、$profile に以下を定義しておく。

function Invoke-As-Admin() {
    if ($args.count -eq 0) {
        gsudo
        return
    }
    $cmd = $args -join ' '
    gsudo "pwsh.exe -Login -Command { $cmd }"
}

Set-Alias -Name: "sudo" -Value: "Invoke-As-Admin"

これでPOSIXライクに管理者権限で任意のコマンドを実行できるようになる。

sudo ls

なお、sudo (gsudo) とすると、POSIX でいう sudo su - のような挙動となる。

環境

  • OS: Windows 11 Pro
    • バージョン: 21H2
    • ビルド番号: 22000.526
  • PowerShell: 7.2.1

参考