今回紹介することはタイトルそのままです。
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で使えるようになると本当に便利です!