このページの本文へ

前へ 1 2 次へ

Windows Info 第427回

WindowsのPowerShellのプロファイルを設定する

2024年04月14日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

実際のプロファイルでの設定方法など

 プロファイルでは、比較的よく使う定数などを変数にあらかじめ設定しておきたいことがある。このような場合、以下のように記述する。

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

起動時に実行されるプロファイルでは、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のプロファイルを使うことで、よく使うオブジェクトなどをあらかじめ変数に定義しておける。なお、関数や変数の定義はできるだけ最低限にして、絶対に忘れないような名前にしておく。

 プロファイルは、起動時に読み込まれるため、長ければ長いほど起動時間がかかる。使いもしない関数の定義に毎回時間を取られるのは無駄である。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン