PowerShell オブジェクトのフィルター処理と分離
Windows PowerShell では、Get リクエストを実行したときの結果のほとんどは、通常、PowerShell オブジェクト(PSObject)形式で作成および表示されます。PSObjects は、PowerShell を他のスクリプト言語と区別する重要な機能の 1つです。
ただし、PSObject はその属性のためにすばやく検索できなかったため、検索インデックスを確立する前に属性を分離する必要があります。この記事では、Windows PowerShell オブジェクト、PS オブジェクトの結果を解析して結果を検索可能にする方法、および PowerShell を使用して適切なフィルタリングを実行する方法について説明します。
PowerShell オブジェクトの概要
前述のように、PowerShell オブジェクトはスクリプト言語のハイライトの 1つです。各 PowerShell オブジェクトには、オブジェクト全体を定義する属性があります。
例として Get-Service
を取り上げましょう。
サンプルコード:
Get-Service
出力:
Status Name DisplayName
------ ---- -----------
Running AarSvc_147d22 Agent Activation Runtime_147d22
Running AdobeARMservice Adobe Acrobat Update Service
Running AESMService Intel® SGX AESM
Get-Service
PowerShell オブジェクト内には、属性として Status
、Name
、および DisplayName
があります。オブジェクトを除外するには、Where-Object
コマンドを使用して、オブジェクトを属性間で分離する必要があります。
たとえば、Status
タイプまたは Name
タイプしか取得できませんが、最初に属性を呼び出さずに特定のキーワードを検索することはできません。
サンプルコード:
Get-Service | Where-Object {$_.Status -match "Stopped" }
出力:
Status Name DisplayName
------ ---- -----------
Stopped AJRouter AllJoyn Router Service
Stopped ALG Application Layer Gateway Service
Stopped AppIDSvc Application Identity
この記事の次のセクションでは、これらの出力を PS オブジェクト形式ではなく文字列として表示し、さまざまな検索クエリでフィルタリングを実行する方法について説明します。
PowerShell を使用した出力のフィルタリング
出力をすばやくフィルタリングするには、出力を文字列形式で表示する必要があります。コマンドを Out-String
コマンドにパイプする必要があります。
以下の例では、次のコードスニペットで簡単に使用できるように、変数に割り当てます。
サンプルコード:
$serviceOutput = (Get-Service | Out-String) -split "`r`n"
上記のコードは、値が変数に格納されているため、結果を生成しません。また、結果行を 1 行に分割するために、少し文字列操作を実行しました。
後でフィルタリングすると、スクリプトは 1つの文字列全体ではなく、行ごとに表示します。
$serviceOutput
変数に格納されている値は文字列形式です。キーワードを検索するには、検索するキーワードと一緒に Select-String
コマンドをパイプする必要があります。
サンプルコード:
$serviceOutput | Select-String Intel
出力:
Running AESMService Intel® SGX AESM
Stopped Intel(R) Capabi... Intel(R) Capability Licensing Servi...
Stopped Intel(R) TPM Pr... Intel(R) TPM Provisioning Service
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn