PowerShell で Where-Object コマンドを使用する

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell の Where-Object コマンドレット
  2. PowerShell でスクリプトブロックを使用してフィルター条件を作成する
  3. PowerShell でパラメーターを使用してフィルター条件を作成する
  4. 複数の条件文の使用
PowerShell で Where-Object コマンドを使用する

オブジェクトのコレクションで Windows PowerShell プロパティを操作する場合、必要な特定のものをすべてフィルタリングする方法が必要になる場合があります。したがって、Windows PowerShell の Where-Object コマンドレットの使用方法を知ることは、Windows PowerShell スキルセットに必要なテクニックです。

Where-Object コマンドレットは、オブジェクトをフィルタリングするための貴重なコマンドです。この記事では、Where-Object コマンドを作成するいくつかの方法、その構文、および複数の条件ステートメントの使用について学習します。

PowerShell の Where-Object コマンドレット

Windows PowerShell の Where-Object コマンドレットの唯一の目標は、コマンドの出力をフィルター処理し、出力する特定の情報を返すことです。

要約すると、Where-Object コマンドレットはフィルターです。これにより、True または False のいずれかを返す条件を作成できます。状況の結果に応じて、コマンドレットは出力を返すかどうかを決定します。

この条件は、スクリプトブロックとパラメーターの 2つの方法で作成できます。

PowerShell でスクリプトブロックを使用してフィルター条件を作成する

スクリプトブロックは、Windows PowerShell の重要なコンポーネントです。これらは、スクリプト言語全体で何百もの場所で使用されています。スクリプトブロックは、コードを分類してさまざまな場所で実行する無名関数です。

スクリプトブロックの例:

{$_.StartType -EQ 'Automatic'}

次に、Windows PowerShell パイプラインを使用して、これらのオブジェクトを Where-Object コマンドレットにパイプ処理し、FilterScript パラメーターを使用できます。FilterScript パラメータはスクリプトブロックを受け入れるため、次の例のように、各オブジェクトのプロパティが特定の値と等しいかどうかを確認する条件を作成できます。

サンプルコード:

Get-Service | Where-Object -FilterScript {$_.StartType -eq 'Automatic'}
多くの人は、Where-Object コマンドレットで位置パラメーターを使用し、FilterScript パラメーター名を含めません。代わりに、Where-Object {$_.StartType -eq 'Automatic'} のようなスクリプトブロックのみを提供して、より高速でクリーンなスクリプト方法を実現します。

このタイプの構文はこの特定のシナリオで機能しますが、中括弧({})を使用したスクリプトブロックの概念により、経験の浅い Windows PowerShell ユーザーにとって、コードが読みにくくなり、難しくなります。この読みやすさの問題により、Windows PowerShell チームはパラメーターを導入しました。

PowerShell でパラメーターを使用してフィルター条件を作成する

Windows PowerShell 3.0 で導入されたパラメーターは、パラメーターの記述方法により自然な流れを持っています。前の同じ例を使用して、パラメーターを使用して特定の出力をフィルター処理してみましょう。

サンプルコード:

Get-Service | Where-Object -Property StartType -eq 'Automatic'

上記の点に注意してください。このコマンドは、スクリプトブロックを使用する代わりに、オブジェクトプロパティをプロパティパラメータのパラメータ値として指定します。さらに、-eq 演算子がパラメーターになり、Automatic 値を渡すことができるようになりました。

この方法でパラメーターを使用すると、スクリプトブロックが不要になります。ただし、Microsoft はスクリプトのよりクリーンな方法としてパラメーターを導入しましたが、記事の次のセクションで説明するスクリプトブロックを使用する優れた理由があります。

複数の条件文の使用

演算子(-and または -or など)を使用して 2つ以上の条件を組み合わせ、スクリプトブロックを使用してそれらを評価できます。ただし、各条件を正常に評価するには、部分式と呼ばれる特定の Windows PowerShell コンポーネントを使用する必要があります。

Windows PowerShell では、部分式を使用して、Where-Object などのフィルタリング構文内で式を実行できます。これを行うには、実行する条件ステートメントを括弧(())で囲みます。

サンプルコード:

Get-Process | Where-Object {($_.CPU -gt 2.0) -and ($_.CPU -lt 10)}

スクリプトブロックの例:

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    334      21    18972      26384       5.23   3808   0 AnyDesk
    635      34    13304      51264       9.56   4140   5 notepad
    726      36    12820      51196       4.69  12088   5 notepad
    802      46    18356      65088       7.98  10784   5 OneDrive
    340      18     6472      26436       3.44   1252   5 RuntimeBroker
    698      34    14672      44484       3.63   3284   5 RuntimeBroker
    323      19     5732      23432       4.00  11200   5 RuntimeBroker
    560      18     6440      27752       4.63   8644   5 sihost
    632      31    21524      69972       2.81   6392   5 StartMenuExperienceHost
    390      18     9756      30832       3.94   3084   5 svchost
    523      24     8768      36312       2.17   6300   5 svchost
    524      17     6416      21036       4.42  10932   5 SynTPEnh
    525      22    15336      38904       3.41   2192   5 TextInputHost
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 Statement