PowerShell オブジェクトのフィルター処理と分離

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell オブジェクトの概要
  2. PowerShell を使用した出力のフィルタリング
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 オブジェクト内には、属性として StatusName、および 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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell Object