実際のプロファイルでの設定方法など
プロファイルでは、比較的よく使う定数などを変数にあらかじめ設定しておきたいことがある。このような場合、以下のように記述する。
remove-variable -ErrorAction SilentlyContinue -Force -Name <変数名>
Set-Variable -Option ReadOnly -Name <変数名> -Description '<変数の説明>' -Value <値>
最初のremove-variableは、ドットソースでの読み込みを考慮したもの。ReadOnlyに設定した変数を再度設定しようとするとエラーになるので、先に削除しておく。未定義のときremove-variableがエラーになるが、「-ErrorAction SilentlyContinue」オプションが指定してあるため、エラーメッセージを表示せずに実行が継続する。
プロンプト文字列を変更したいという用途もある。この場合、Prompt関数を記述する。注意点は、関数なので必ず何かを返すようにする。PowerShellはPrompt関数の戻り値が$nullだと、組み込みの文字列「PS>」を出力する。
function prompt()
{
write-host -NoNewline -ForegroundColor Green -BackgroundColor Red "PS>";
" ";
}
上のリストでは、Write-Hostでプロンプトを色付きで表示させている。しかし、Write-Hostはコンソールに直接書き込み、値を返さないので、最後の「" ";」でプロンプトの最後にスペースを出力させている。
プロファイルをWindows PowerShellとPowerShellで共有したいとき、以下の方法でそれぞれを区別できる。
if($PSVersionTable.PSVersion.Major -eq 5) {
"Windows PowerShell";
} else {
"PowerShell";
}
PowerShellが起動されたときのオプションを得るには、以下のようにして、自分のプロセスIDを探し、コマンドラインを得る。PowerShellの実行コマンドパス(スペースやハイフンなどが含まれる可能性がある)を""に置換したのち、スペースを区切り文字として分割(split演算子)する。
$myProcess= Get-CimInstance Win32_Process -Filter "ProcessID = $PID";
$myArg=($myProcess.CommandLine -replace ($myProcess.Path -replace "\\","\\"),"") -split " " ;
起動時に実行されるプロファイルでは、PowerShellの起動オフションを知りたくなることがある。このような場合、自分のプロセスID($PID)を使って、プロセスオブジェクトからCommandLineプロパティを取得する。ここには、PowerShellの起動コマンドパスが含まれているので、これを""に置換したあと、スペースで分割することで起動オプションの配列が得られる
PowerShellでは、関数の一覧は「Get-ChildItem -path function:」でできるが、面倒なので短い名前の関数を作っておく。筆者は、BASICから使い始めたので「LIST」という名前にしている。LISTは引数無しで、ユーザー登録関数の一覧を、関数名をつけるとその定義を表示する。
function LIST(){
param($fname)
if ($fname -eq $null) {
Get-ChildItem -path function: | Where-Object { $_.Source -eq '' -and $_.Name -notlike '[A-Z]:'}
} else {
$x=Get-Item ("function:"+$fname)
"Parameters"
$x.Parametersets.Parameters | select Position,Name,ParameterType,IsMandatory
"`nOptions"
$x.Options
"`n"+$x.CommandType+" "+$fname+"() { $($x.Definition) }"
}
}
なお、コンソールの背景色は、コンソールプログラム(conhost.exeやWindows Terminal)側で設定する。また、デフォルトの文字色に関してはPSReadLineで色分けを管理しているので、PSReadLine側で設定する。こちらについては別途記事にしたい。
PowerShellのプロファイルを使うことで、よく使うオブジェクトなどをあらかじめ変数に定義しておける。なお、関数や変数の定義はできるだけ最低限にして、絶対に忘れないような名前にしておく。
プロファイルは、起動時に読み込まれるため、長ければ長いほど起動時間がかかる。使いもしない関数の定義に毎回時間を取られるのは無駄である。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











