PowerShellの実行環境について

今回はPowerShellの実行環境について、私が普段使っている環境を紹介します。
ここでいう環境とはPowerShellの起動時に読み込まれるプロファイルファイルの設定についてです。

プロファイルファイルとはユーザディレクトリ配下の「WindowsPowerShell\profile.ps1」というファイルのことです。XPでは「c:\Documents and Settings\ユーザ名\My Documents\Windows PowerShell」というディレクトリに置かれています(無い場合は作って下さい)。

PowerShellは起動するとまずこのファイルに書かれたスクリプトを実行するので、よく使う変数や関数を事前に読み込んでおくことができます。

私の環境ではこのプロファイルファイルが置かれているディレクトリの構成を以下のようにしています。

ディレクトリ構成

http://sites.google.com/site/coma2n/Home/image-gallary/001.PNG

そして、プロファイルファイルではこれらのディレクトリからスクリプトを読み込んだり、パスを通すための設定を行います。

profile.ps1

# ライブラリフォルダ配下のファイルを読み込む
Get-ChildItem $LIB_HOME *.ps1 | % { .($_.FullName) }
# スクリプトフォルダ配下のフォルダに対してもパスを通す
Get-ChildItem $SCRIPT_HOME -recurse | ? { $_ -is [IO.DirectoryInfo] } | % { $Env:Path += (";" + $_.FullName) }
# フォーマットフォルダ配下のフォーマットファイルを読み込む
Get-ChildItem $FORMAT_HOME -recurse -include *.ps1xml | % { Update-FormatData -prependPath $_.FullName }

# おまけ、コンソールの表示を変える
function prompt {
   $drive = (Get-Location).Drive.Name
   $name = [IO.Path]::GetFileName((Get-Location).Path)
   "PS $name > "
}

このように設定しておけば、例えば「Print.ps1」という、以下のような引数をパイプラインに出力するスクリプトファイルを作った場合、

Print.ps1
param([string]$msg)

Write-Output $msg

このファイルをlibディレクトリに置いてやれば、PowerShellから「./Print hoge」と打ち込んでやれば使うことができます。

スクリプトファイルを分類したい時はサブディレクトリでまとめてlibディレクトリ配下に置いてやれば、プロファイルファイルがlibディレクトリ配下のサブディレクトリ配下全てに対してもパスを通すため、そのサブディレクトリにcdしなくても実行することができます。

小さな事ですが、こういった事をしておくと快適なPowerShellライフを送ることができると思うので参考にしてみて下さい。