PowerShell のプロファイル

この記事は約5分で読めます。

PowerShell は Windows の管理や構成に利用されるコマンド シェルです。また Azure や Microsoft 365 など Microsoft のクラウド サービスの管理でも PowerShell を利用する場合が多いでしょう。このように Windows システムの管理者にとって欠かせない PowerShell ですが、この動作をカスタマイズできるのが PowerShell のプロファイルです。

PowerShell のプロファイル

PowerShell のプロファイルは .ps1 拡張子を持つ PowerShell スクリプト ファイルです。スクリプト内にカスタム関数を書いておくと、その関数が PowerShell コンソールでコマンドとして起動できます。またプロンプトやウィンドウ タイトルなどを制御することもできます。

Linux / Unix のシェルで、例えば Bash なら .bashrc にカスタマイズ内容を書いておくと自動的にシェルの起動時に実行されるのと同様、PowerShell のプロファイル ファイルに書いた内容は PowerShell の起動時に読み込まれて自動的に実行されます。

プロファイルは1つではなく、4つのレベルで構成されています。

  1. すべてのユーザー、すべてのホスト(AllUsersAllHosts)
  2. すべてのユーザー、現在のホスト(AllUsersCurrentHost)
  3. 現在のユーザー、すべてのホスト(CurrentUserAllHosts)
  4. 現在のユーザー、現在のホスト(CurrentUserCurrentHost)

レベル「1.」から「4.」の順にプロファイルが読み込まれ、後から読み込まれたプロファイルで先に読み込まれたプロファイルの設定がオーバーライドされます。例えば AllUsersAllHosts でカスタム関数を定義して、CurrentUserCurrentHost でも同じ名前のカスタム関数を定義すると、実行された PowerShell コンソールでは CurrentUserCurrentHost で定義したカスタム関数がコマンドとして実行できます。

それぞれのレベルのプロファイルは、以下の PowerShell コマンドで確認できます。

$PROFILE | Select-Object *

コマンドを実行すると、以下のような出力が得られます(上は PowerShell 5、下は PowerShell 7 の場合)。

PS> $PROFILE | Select-Object *

AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\username\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Length : 84

PS>$PROFILE | Select-Object *

AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\username\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\usename\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Length : 77

それぞれのコマンドで表示される.ps1 ファイルが、プロファイルの実体です。

プロファイルのカスタマイズ

プロファイルのカスタマイズは、上記で確認できるそれぞれの .ps1 ファイルを編集することです。

.ps1 ファイルは単純なテキスト ファイルなので、好みのテキスト エディターで編集できます。簡単な編集であれば notepad.exe(メモ帳)で十分ですし、複雑な編集であれば vscode を利用するとよいでしょう。

例えば C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 以下のカスタム関数を記述して保存します。

function prompt {
$Env:COMPUTERNAME + "\" + (Get-Location) + "> "
}

この状態で PowerShell(PowerShell 5)を起動すると、以下のようにプロンプトにホスト名が表示されます。

なお、.ps1 はスクリプトなので、PowerShell の ExecutionPolicy の影響を受けます。
ExecutionPolicy が Undefined や Restricted の場合( Windows クライアントの既定では Restricted の動作)プロファイルのスクリプトは実行されません。この場合は、PowerShell を管理者として実行し
 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
を実行して ExecutionPolicy を変更します。その後、PwerShell を起動すればプロファイルのカスタマイズが有効になります。

PowerShell を多用する場合は、プロファイルのカスタマイズを行ってより効率的に作業できるようにするとよいでしょう。

参考情報

この記事を書いた人

MurachiAkira
タイトルとURLをコピーしました