環境
Name Value
---- -----
PSVersion 7.0.3
PSEdition Core
GitCommitId 7.0.3
OS Microsoft Windows 10.0.18362
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
方法1: $Profile に追記する
$Profile
(C:\Users\USERNAME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
)に書かれた内容は起動時に読みこまれてセッション内で使用できるようになります。
ここに書かれた変数はスコープ的には最上位の global
になるので気をつける必要がありますね。
外部モジュールの読み込みやエイリアスの登録だとかの簡単な設定であればこの方式が楽です。
方法2:$Profile からドットソースで読み込む
PowerShell では .
に半角空けて .ps1
ファイルのパスを指定すると中身が現在のセッションに展開されます。このドットソース機能を使うと用途別にファイルを分けてカスタマイズできるようになるので、自作コマンドレットが増えたときに上記の方法1よりも管理がしやすくなるというメリットがあります。
今のところ、 $Profile
と同じ階層の cmdlets
というディレクトリに自作コマンドレットを置いていくという運用がしっくり来ています。
コマンドレットの読み込みには以下の内容を $Profile
に書いておきます。
$Profile | Split-Path -Parent | Join-Path -ChildPath "cmdlets" | Get-ChildItem -Recurse -Include "*.ps1" | ForEach-Object {
. $_.FullName
}
動作的には読み込み先の .ps1
ファイルがそのまま $Profile
内に展開されるようです。 PowerShell 3 以前から使える $myInvocation
は、読み込み先のファイルに書かれていても実際の実行場面では $Profile
と同じディレクトリを指すようになるので注意が必要です。
(PowerShell 3 以降で導入された $PSCommandPath
なら正しくファイル名を返すようです)
モジュールとして読み込む方法もありますが、 Modules
ディレクトリは公式から取得したモジュールのために充てたいのと、.psd1
や .psm1
の扱いが手に余るのでこの方式です。
他に便利な方法がありましたらご指示いただければ幸いです。