今回紹介することはタイトルそのままです。
PowershellではBashのsudoのように簡単に管理者権限で実行出来るようにするコマンドがありません。
そこで、それとほぼ同等なものを作りたい、というのが今回の話題です。
早速、始めて行きましょう。

手元の環境 見出しへのリンク

Powershell 6.2.3

私が使っているPowershellはWindowsに標準でインストールされている.NET Framework依存のものではなく、 .NET Core依存のものです。これはWindowsだけでなくmacOSやLinuxでも動くのでWindows以外を使っている方もインストール出来ます。

以降、Powershellの実行ファイル名をpwsh.exeとしていますが、.NET Framework依存のものをお使いの方は適宜powershell.exeで読み替えてください。

コマンドの実装方針 見出しへのリンク

sudoと同等な機能をもった関数を実装し、sudoという名前のAliasとして登録する。

方法 見出しへのリンク

まず、Powershellを起動し、$profileの値を読みます。

pwsh
# PowerShell 6.2.3
# Copyright (c) Microsoft Corporation. All rights reserved.
#
# https://aka.ms/pscore6-docs
# Type 'help' to get help.

$profile
# C:\.....\Microsoft.PowerShell_profile.ps1

続いて読んだパスのファイルを開きます。
お好みのソフトで開きましょう。因みに私はVisual Studio Codeで開きました。

code $profile

開けたら以下のようなコードを書きます。

# 管理者権限で実行する関数
function SudoRun
{
    # $programにコマンドを詰める
    foreach($arg in $args)
    {
        $program = "$program $arg"
    }

    # Powershellにより管理者権限で実行
    pwsh -command "Start-Process -Verb runas $program"
}

# 関数をAliasとして登録する
Set-Alias -Name sudo -Value SudoRun

これを書いたら、そっとそのファイルとPowershellを閉じましょう。
その後、Powershellを起動すると、もうあなたはsudoをPowershellで使うことができます!

問題点 見出しへのリンク

これはBashから見れば、なんちゃってsudoです。
あくまで管理者権限でコマンドを別インスタンスで実行しているだけなので、出力は表示されません…
例えば、

sudo pwd

とやっても、一瞬pwdの黒い画面が現れるだけです。
ここは改善の余地がありそうなので出来たら報告します。

まとめ 見出しへのリンク

WindowsのパッケージマネージャーのChocolateryは実行に管理者権限が必要で、 その度にGUIで"管理者として実行"を押すのが億劫でした。
sudoがPowershellで使えるようになると本当に便利です!

参考 見出しへのリンク

Windows で sudo なことをする。