概要
タイトルそのまんま
Win10で、PowerShellが起動したときに自前の関数であったりエイリアスなどを自動的に読み込む
ただし、そのスクリプトは複数ファイルで分割管理したい
ということを解決する
前提
PowerShell起動時にスクリプトを読み込ませる方法自体は
~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
にスクリプトを書くだけである。
なお、スクリプトを読み込ませるためにはPowerShellのスクリプト実行の設定を変える必要がある。
そのためには
PowerShell Set-ExecutionPolicy RemoteSigned
というコマンドを管理者権限で実行することでできる。
詳しい説明については
「PowerShell Script 有効化」
等でぐぐってもらいたい
実装
$PSScriptDirectory = "C:\Users\{USER_NAME}\Documents\WindowsPowerShell\Scripts\"
$files = (Get-ChildItem ($PSScriptDirectory + "*.ps1")).Basename
foreach ($file in $files) {
Write-Host -NoNewline ("Loading") -ForegroundColor Yellow
Write-Host -NoNewline (" {0,-20}" -f $file)
try {
. ( $PSScriptDirectory + $file)
Write-Host "Done" -ForegroundColor Green
} catch{
Write-Host "Abort" -ForegroundColor Red
}
}
Write-Host "Configure Loading Complete" -ForegroundColor Green
このコードさっきの起動時に読み込まれるスクリプトに書き、分割したスクリプトを適当なディレクトリに置く。
(ここでは、PSScriptDirectoryという名前の変数に代入しているのを見てもらえればわかるが、起動時に読み込まれるスクリプトのあるディレクトリに新しくScriptsというディレクトリを作成し、そこにスクリプトを配置している)
以上
実装の説明
特段難しいことはしておらず
スクリプトを配置したディレクトリを変数に代入
ディレクトリにある拡張子ps1
のファイル一覧を取得し、ファイル名のみ抽出(ここではロードされたファイル名を表示する機能のためにファイル名のみを抽出している。ファイル名を表示する必要がなければ、Basenameを外すことでフルパスのファイル名を取得できるため、読み込み時の処理でディレクトリ名を合体させる必要がなくなる)
ファイル名を表示し
読み込み
完了時に"Done"と表示する
また、エラーが検出されると"Abort"を表示する
(このあたりは完全なこだわりである)
スクリプトの外部読み込みは
. ScriptFile.ps1
と書くことでできる