Windows PowerShell: 私の Windows PowerShell プロファイル
プロファイル スクリプトは Windows PowerShell をカスタマイズし、希望どおりに動作させることができる強力な手段の 1 つです。
Don Jones
講義で Windows PowerShell プロファイル スクリプトについて説明すると、必ず私のプロファイル スクリプトに何が含まれているのかをたずねる受講者がいます。一般的に、このような質問をする受講者は単にプロファイルの使用方法を知りたいだけだと考えています。
プロファイルは、すばらしい機能ですが、Windows PowerShell の起動時に内部で機能するので、最初は魔法のようなものだと思うでしょう。しかし、実際は、皆さんが考えているよりもずっと単純な機能です。
まず、Windows PowerShell はコンピューター上にある単なる大きな DLL だとに考える必要があります。私はこれを Windows PowerShell エンジンと呼んでいます。Windows PowerShell エンジンでは、プロファイルに対して何の処理も行いません。また、たいていの場合、.NET 開発者でない限り、このエンジンと直接対話することさえできません。
ホストするアプリケーション (通称、ホスト) を使用して Windows PowerShell を操作できるのは人間だけです。多くのユーザーが使用する標準的なブルー スクリーン コンソールである PowerShell.exe は、このようなホストの 1 つです。Windows PowerShell Integrated Scripting Environment (ISE) もこのようなホストの一例です。PrimalScript、PowerShell Plus、PowerSE、PowerGUI など、サード パーティ製の Windows PowerShell エディターもホストです。ホストでは、プロファイル スクリプトを読み込みますが、プロファイル スクリプトを読み込むかどうかを判断することもあります。ホストでは、読み込むスクリプトを実際に決めます。
PowerShell.exe ホストと Windows PowerShell ISE では、最大で 4 つのスクリプトを読み込みます。このうち 2 つはユーザー プロファイルの \Documents\WindowsPowerShell フォルダーにあります。この 2 つは、ユーザーごとのプロファイルです。この 2 つのうち、1 つ (profile.ps1) はすべての Windows PowerShell ホストで読み込まれます。
もう 1 つ (Microsoft.PowerShell_profile.ps1) は、ホストするアプリケーション固有のプロファイルで、PowerShell.exe ホストで読み込まれます。残りの 2 つのスクリプトは、ユーザーに依存しないスクリプトです。1 つはホスト固有のもので、もう 1 つはすべてのホストで読み込まれます。
「Get-Help about_profiles」をシェルで実行して、これらのファイルについて調べることができます。スクリプト エディターなどサード パーティ製のホストについては、それぞれのマニュアルを参照する必要があります。サード パーティ製のホストには、Windows PowerShell と一貫性のある動作を実現するために、PowerShell.exe と同様のプロファイル スクリプトを読み込むものもあります。また、ホスト固有のスクリプトを検索するものや起動時に読み込むスクリプトを指定できるものもあります。
つまり、ホストでは、このようなスクリプトを起動時に検索します。スクリプトが存在すれば、スクリプトを実行します。Windows PowerShell ホストで読み込むスクリプトは既定では存在しません。さらに言えば、Documents\WindowsPowerShell フォルダーも既定では作成されていません。プロファイル スクリプトとフォルダーを使用する場合は、これらを作成する必要があります。また、実行ポリシーを Restricted (既定値) 以外に設定して、スクリプトの実行を有効にする必要があります
私のプロファイル
では、私のプロファイルに何が含まれているのかという問いにお答えしましょう。少し言うのは恥ずかしいですが、基本的に何もありませんと答えます。これは、私が Windows PowerShell に関して多くの特殊な活動 (ビデオ トレーニング、講義、記事の執筆など) を行う傾向にあるからです。このような活動では、特別な設定がなされていない既定のシェル エクスペリエンスが必要になります。多くの場合、必要なものを読み込む作業を見てもらうため、事前に何かを読み込むことはしません。
しかし、私が一般的な運用環境で作業するとすれば、プロファイルに何を配置するかと言うと、まず毎日使用するモジュールを配置するでしょう。たとえば、Import-Module ActiveDirectory というコマンドを追加する可能性があります。Active Directory を操作する頻度が高いことが予想されるため、このモジュールを事前に読み込んでおくと役に立ちます。
また、プロファイルにはカスタム関数を配置しないでしょう。代わりに、カスタム関数用のスクリプト モジュールにカスタム関数を配置して、スクリプト モジュールをプロファイルに読み込みます。このようにすると、プロファイルを整理された状態で保つことができます。さらに、このモジュールが他の作業と競合した場合には、このモジュール (およびモジュールに含まれる関数) を簡単に取り除くことができます。
私は Windows PowerShell のウィンドウ タイトル バーや Windows PowerShell プロンプトなどの設定は変更しません。変更するのは悪いことではありませんが、私はこのようなものが既定の状態で表示されることを望むタイプの人間です。そのため、このようなものは既定のままにしておきます。ただし、プロンプトの設定を変更するのが好ましいと考えているユーザーが多数いることは知っています。このような設定は、プロファイルで変更します。
ただ、1 つ変更するとしたら、次のように変更します。
$host.privatedata.ErrorForegroundColor = 'green'
この変更により、エラー メッセージが赤色ではなく緑色で表示されるようになります。このように変更するようにお伝えするのは、既定の黒色の背景に赤色でメッセージが表示されるとコントラストが低すぎて読みづらいからです。しかし本当の理由は、画面いっぱいに表示される赤いテキストは、私の高校時代の国語の授業を彷彿させ、ストレスを感じて疲れるからです。エラー メッセージが緑色で表示される場合、正しいことをしていると思えるので、それほどストレスを感じません。これはおかしなことだとわかっていますが、苦情については、高校時代の恩師である Giovanni 先生と Hansen 先生までお願いします。
カスタム エイリアスは使用すると困るので定義していません。カスタム エイリアスを使用すると、カスタム エイリアスの定義を持っていないユーザーにカスタム エイリアスを渡す可能性があり、サンプル スクリプトが機能しないおそれがあります。
また、Write-Host コマンドレットを使用して巧みに色付けしたスプラッシュ スクリーンを表示することも、利用可能な関数やモジュールの一覧も表示しません。必要な場合には、これらを簡単に一覧表示する方法を知っていますが、最初にシェルを起動したときに、画面に多くのものが表示されるのを好みません (すっきりとした気分で始められるように、いつも cls コマンドを実行しています)。また、ユーザー プロファイル フォルダーのルートではなく、C: ドライブのルートで開始できるように「cd c:\」を実行しています。
以上が私のプロファイルの中身です。あなたのプロファイルには何がありますか。
Don Jones は、Microsoft MVP の受賞者で、『Learn Windows PowerShell in a Month of Lunches』(Manning Publications、2011 年) の著者でもあります。この書籍は、管理者が Windows PowerShell を効率的に使用できるようにすることを目的としています。また、一般ユーザーを対象にオンサイトの Windows PowerShell トレーニングも開催しています。Don に対するお問い合わせについては、ConcentratedTech.com (英語) または bit.ly/AskDon (英語) を参照してください。