Edited at

PowerShellでのプロファイル (.bashrcのようなもの)

More than 3 years have passed since last update.


発想

PowerShellで.bashrcとか.bash_profileとか.zshrcみたいなことをしたい。

この操作を行うとエイリアスの設定やそのほかの毎度の設定を楽に行うことができるようになります。

今回は例としてエイリアスの作成とシェル関数を定義してみます。


準備

まず作成したプロファイルを実行するために管理者権限のシェルから以下のコマンドを実行し、制限モードを解きます。

> Set-ExecutionPolicy Unrestricted

これを実行しないとセキュリティ上の問題でプロファイルが実行されません。


プロファイルの場所

あとは用途に合わせてプロファイルの場所を選ぶだけです。


すべてのユーザーのすべてのシェル向けのプロファイル

%windir%\system32\WindowsPowerShell\v1.0\profile.ps1


すべてのユーザーのMicrosoft.PowerShellシェル向けのプロファイル

%windir%\system32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1


指定したユーザーのすべてのシェル向けのプロファイル

%UserProfile%\Documents\WindowsPowerShell\profile.ps1


指定したユーザーのMicrosoft.PowerShellシェル向けのプロファイル($profile)

%UserProfile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

なかったらディレクトリとファイルを自分で作成してください。

あとはバリバリ書くだけです。


例: エイリアスを作成してみる

エイリアスを作成する場合はコマンドラインから以下のようにするとラクです。

> notepad $profile

llでGet-ChildItemが実行されるように設定してみます。


$profile

Set-Alias ll Get-ChildItem


以下のようになれば成功です。

> ll

ディレクトリ: C:\Users\***

Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 2015/08/04 1:45 3D Objects
d-r--- 2015/08/02 9:44 Contacts
...


例: 関数を作成してみる

今度は関数を作成してみます。

> notepad $profile


$profile

function wc([switch] $l, [switch] $w, [switch] $c, $file = (throw "ファイルを指定してください")) {

$content = Get-Content $file
$is_not_defined = $l -eq $false -and $w -eq $false -and $c -eq $false
if ($l -eq $true -or $is_not_defined) {
($content | Measure-Object -Line).Lines;
}
if ($w -eq $true -or $is_not_defined) {
($content | Measure-Object -Word).Words;
}
if ($c -eq $true -or $is_not_defined) {
($content | Measure-Object -Character).Characters;
}
}


以下のようになれば成功です。

> Get-Content file

a b cd
> wc file
1
3
6

(このwcの例ではパイプラインには対応していません)