PowerShellでのフォーマット設定、フィルタリング、および比較
今回のGeek Schoolでは、Pipelineのオブジェクトの書式設定、フィルタ処理、比較について説明します。.
シリーズの前の記事を必ず読んでください。
- PowerShellを使用してWindowsを自動化する方法を学ぶ
- PowerShellでコマンドレットを使用する方法
- PowerShellでオブジェクトを使用する方法を学ぶ
そして、シリーズの残りの部分を一週間中お楽しみに.
デフォルトフォーマット
私が最初に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タイプのPipeline内のオブジェクトをフォーマットして、Status、Name、およびDisplayNameの3つの列を持つテーブルを作成していることがわかります。しかし、あなたが扱っているタイプがそのファイル、またはそのことに関する他のフォーマットファイルにエントリを持っていない場合はどうなりますか?それでは、実際は非常に単純です。パイプラインから出力されるオブジェクトに5つ以上のプロパティがある場合、PowerShellはそのオブジェクトのすべてのプロパティを一覧に表示します。プロパティの数が5未満の場合は、それらをテーブルに表示します。.
データをフォーマットする
オブジェクトやタイプのデフォルトのフォーマットに満足できない場合は、独自のフォーマットをロールバックできます。これを行うには、知っておく必要がある3つのコマンドレットがあります。.
- フォーマットリスト
- フォーマット表
- フォーマット全体
フォーマット全体 単純にオブジェクトのコレクションを取り、各オブジェクトの単一のプロパティを表示します。デフォルトでは、nameプロパティを探します。オブジェクトにnameプロパティが含まれていない場合は、プロパティがアルファベット順に並べ替えられたら、オブジェクトの最初のプロパティが使用されます。.
Get-Service |フォーマット全体
ご覧のとおり、デフォルトで2列に設定されていますが、使用するプロパティと表示する列数の両方を指定することもできます。.
Get-Service |フォーマットワイド - プロパティ表示名 - 列6
既定でテーブルとして書式設定されているものがある場合は、Format-Listコマンドレットを使用していつでもリストビューに切り替えることができます。 Get-Processコマンドレットの出力を見てみましょう。.
この表形式のビューは、実際にはこの種の情報に非常に適していますが、リスト形式で表示したいとしましょう。我々が本当にしなければならないのはそれをパイプでつなぐことだけです フォーマットリスト.
取得プロセスフォーマットリスト
ご覧のとおり、デフォルトではリストに表示される項目は4つだけです。オブジェクトのすべてのプロパティを表示するには、ワイルドカード文字を使用できます。.
取得プロセスフォーマットリスト - プロパティ*
あるいは、必要なプロパティだけを選択することもできます。.
取得プロセスフォーマット - リスト - プロパティ名、ID
フォーマット表, 一方、データを受け取り、それをテーブルに変換します。 Get-Processからのデータはすでにテーブルの形式になっているので、テーブルに表示したいプロパティを簡単に選択するために使用できます。 AutoSizeパラメータを使用して、すべてのデータを単一の画面に収めるようにしました。.
取得プロセスフォーマットテーブル名、id - AutoSize
フィルタリングと比較
オブジェクトベースのパイプラインを使用することの最もよい点の1つは、Where-Objectコマンドレットを使用して、どのステージでもパイプラインからオブジェクトを除外できることです。.
Get-Service | Where-Object $ _。Status -eq“ Running”
whereオブジェクトを使用することは実際には非常に簡単です。 $ _は現在のパイプラインオブジェクトを表し、そこからフィルタリングするプロパティを選択できます。ここでは、StatusプロパティがRunningに等しいオブジェクトのみを保持していました。フィルタリングスクリプトブロックで使用できる比較演算子がいくつかあります。
- eq(等しい)
- neq(等しくない)
- gt(より大きい)
- ge(より大きいか等しい)
- lt(小なり)
- le(より小さいか等しい)
- like(ワイルドカード文字列一致)
完全なリストと詳細情報は、about_comparisonの概念的なヘルプファイルで見ることができますが、Where-Obeject構文に慣れるには少し時間がかかります。今回はこれですべてです!