Geek School のこの版では、パイプライン内のオブジェクトの書式設定、フィルタリング、比較について説明します。
このシリーズの以前の記事を必ずお読みください。
今週はシリーズの残りの部分もお楽しみに。
デフォルトの書式設定
初めて PowerShell を使い始めたときは、すべてが魔法だと思っていましたが、実際は内部で何が起こっているのかを理解するのに少し時間がかかるだけです。 PowerShell フォーマット システムについても同じことが当てはまります。実際、Get-Service コマンドレットを実行すると、生成される出力には、Status、Name、および DisplayName の 3 つのプロパティのみが表示されます。
しかし、Get-Service を Get-Member にパイプすると、ServiceController オブジェクトにはこれら 3 つのプロパティ以外にも多くのプロパティがあることがわかります。それでは何が起こっているのでしょうか?
答えは、ほとんどの組み込みコマンドレットが出力を表示する方法を定義する隠しファイルの中にあります。理解するには、シェルに次のように入力して Enter キーを押します。
メモ帳 C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml
メモ帳の検索機能を使用すると、ServiceController タイプを検索することで、Get-Service コマンドレットの出力の詳細を説明するセクションにすぐにスキップできます。
突然、PowerShell が内部で ServiceController タイプのパイプライン内のオブジェクトをフォーマットし、Status、Name、DisplayName の 3 つの列を持つテーブルを作成していることがわかります。しかし、扱っている型がそのファイルにエントリを持っていない場合や、さらに言えば他の形式のファイルがない場合はどうなるでしょうか?さて、実際には非常に簡単です。パイプラインから出力されるオブジェクトに 5 つ以上のプロパティがある場合、PowerShell はオブジェクトのすべてのプロパティをリストに表示します。プロパティが 5 つ未満の場合は、それらをテーブルに表示します。
データのフォーマット
オブジェクトまたは型のデフォルトの書式設定に満足できない場合は、独自の書式設定を適用できます。これを行うには、3 つのコマンドレットを知っておく必要があります。
- フォーマットリスト
- フォーマットテーブル
- フォーマット全体
Format-wide は 、単純にオブジェクトのコレクションを取得し、各オブジェクトの 1 つのプロパティを表示します。デフォルトでは、name プロパティが検索されます。オブジェクトに name プロパティが含まれていない場合は、プロパティがアルファベット順に並べ替えられた後、オブジェクトの最初のプロパティが使用されます。
サービスを受ける |フォーマット全体
ご覧のとおり、デフォルトでは 2 列ですが、使用するプロパティと表示する列の数の両方を指定できます。
サービスを受ける |フォーマット全体 – プロパティ表示名 – 列 6
既定でテーブルとして書式設定されている場合は、Format-List コマンドレットを使用していつでもリスト ビューに切り替えることができます。 Get-Process コマンドレットの出力を見てみましょう。
この表形式のビューは実際にはこの種の情報に非常に適していますが、リスト形式で表示したいとします。実際に行う必要があるのは、それを Format-List にパイプすることだけです。
取得プロセス |フォーマットリスト
ご覧のとおり、デフォルトではリストに表示される項目は 4 つだけです。オブジェクトのすべてのプロパティを表示するには、ワイルドカード文字を使用できます。
取得プロセス |フォーマットリスト – プロパティ *
あるいは、必要なプロパティだけを選択することもできます。
取得プロセス |形式リスト – プロパティ名、ID
一方 、Format-Table は データを取得してテーブルに変換します。 Get-Process からのデータはすでにテーブルの形式になっているため、それを使用してテーブルに表示するプロパティを簡単に選択できます。 AutoSize パラメーターを使用して、すべてのデータを 1 つの画面に収まるようにしました。
取得プロセス |形式-テーブル名、ID –AutoSize
フィルタリングと比較
オブジェクトベースのパイプラインを使用することの最も優れた点の 1 つは、Where-Object コマンドレットを使用して、どの段階でもパイプラインからオブジェクトをフィルターできることです。
サービスを受ける | Where-Object {$_.Status -eq “Running”}
where オブジェクトの使用は実際には非常に簡単です。 $_ は現在のパイプライン オブジェクトを表し、そこからフィルター処理するプロパティを選択できます。ここでは、Status プロパティが Running に等しいオブジェクトのみが保持されます。フィルタリング スクリプト ブロックで使用できる比較演算子がいくつかあります。
- eq (等しい)
- neq (等しくない)
- gt (より大きい)
- ge (以上)
- lt (未満)
- le (以下)
- like (ワイルドカード文字列一致)
完全なリストと詳細情報は、about_comparison 概念ヘルプ ファイルで参照できますが、Where-Obeject 構文に慣れるまでには時間がかかります。今回はここまでです!





