PowerShell で Where-Object コマンドを使用する
-
PowerShell の
Where-Object
コマンドレット - PowerShell でスクリプトブロックを使用してフィルター条件を作成する
- PowerShell でパラメーターを使用してフィルター条件を作成する
- 複数の条件文の使用
オブジェクトのコレクションで 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn