- 2019/12/23
- 読了4分
-
- j
- s
- m
PowerShellにおいて、[オブジェクト]は、[オブジェクト]を意味します。 は、必要以上のオブジェクトを生成してパイプラインに渡すことがよくあります。 Format-*
コマンドレットを使用すると、表示する特定のオブジェクトのプロパティを指定できますが、これは表示からオブジェクト全体を削除する問題には役立ちません。 パイプラインの終了前にオブジェクトをフィルタリングし、最初に生成されたオブジェクトのサブセットに対してのみアクションを実行できるようにしたい場合があります。
PowerShell には Where-Object
コマンドレットがあり、パイプライン内の各オブジェクトをテストし、特定のテスト条件を満たす場合にのみパイプラインに沿って渡すことが可能です。 テストに合格しないオブジェクトは、パイプラインから削除されます。 FilterScript の値は、スクリプト ブロック (中括弧 ({}
) で囲まれた 1 つまたは複数の PowerShell コマンド) で、true または false と評価されます。 これらのスクリプトブロックは非常に単純ですが、それらを作成するには、別のPowerShellの概念、比較演算子について知っている必要があります。 比較演算子は、その両側に表示される項目を比較します。 比較演算子は、ハイフン文字(-
)で始まり、その後に名前が続きます。 基本的な比較演算子は、ほとんどすべての種類のオブジェクトに対して機能する。
注意
デフォルトでは、テキストを扱うとき、PowerShell の比較演算子は大文字と小文字を区別します。
解析の考慮により、<
、>
、=
などのシンボルは比較演算子として使用されません。 その代わり、比較演算子は文字で構成される。 基本的な比較演算子は次の表のとおりである。
比較演算子 | 意味 | 例(真を返す) | ||
---|---|---|---|---|
-eq | is equal to | 1 ・・・・・・。eq 1 | ||
-ne | と等しくない | 1 -ne 2 | ||
-lt | より小さい | 1 -。lt 2 | ||
-le | 以下である | 1 -le 2 | ||
-gt | より大きい | 2 – -LT 2 | ||
– | 1gt 1 | |||
-ge | Is greater or equal to | 2 -ge 1 | ||
-like | “file.FILE.FILE.FILE”.doc” -like “f*.do?” | |||
-notlike | Is not like (wildcard comparison for text) | “file.doc” -notlike “p*.doc” -like “f*.do?doc” | ||
-contains | ||||
-notcontains | Does not contain | Notcontains 11.2.3 -Contains 2 | Notcontains 1 | Does not 1 |
Where-Object
スクリプトブロックはパイプラインの現在のオブジェクトを参照するために特別な変数 $_
を使用します。 以下はその例です。 数字のリストがあり、3 未満のものだけを返したい場合、Where-Object
を使用して、次のように入力して数字をフィルタリングできます:
1,2,3,4 | Where-Object {$_ -lt 3}12
Filtering Based on Object Properties
$_
が現在のパイプライン オブジェクトを参照しているので、テストのためにそのプロパティにアクセスすることができます。 特定のシステム上に何百ものシステム ドライバーがあるかもしれませんが、現在実行中のものなど、システム ドライバーの特定のセットにしか興味がない場合もあります。 Win32_SystemDriver クラスの関連するプロパティは State です。
Get-CimInstance -Class Win32_SystemDriver | Where-Object {$_.State -eq 'Running'}
と入力することにより、システム ドライバーをフィルタリングして、実行中のものだけを選択できます。 StartMode 値をテストすることにより、自動的に起動するように設定されたドライバのみを選択するようにフィルタリングすることもできます:
Get-CimInstance -Class Win32_SystemDriver | Where-Object {$_.State -eq "Running"} | Where-Object {$_.StartMode -eq "Auto"}
DisplayName : RAS Asynchronous Media DriverName : AsyncMacState : RunningStatus : OKStarted : TrueDisplayName : Audio Stub DriverName : audstubState : RunningStatus : OKStarted : True...
これにより、ドライバが実行されていることがわかったので、もはや必要ない多くの情報が得られます。 次のコマンドは、これら 2 つのプロパティのみを含み、よりシンプルな出力になります。
Get-CimInstance -Class Win32_SystemDriver | Where-Object {$_.State -eq "Running"} | Where-Object {$_.StartMode -eq "Manual"} | Format-Table -Property Name,DisplayName
Name DisplayName---- -----------AsyncMac RAS Asynchronous Media Driverbindflt Windows Bind Filter Driverbowser BrowserCompositeBus Composite Bus Enumerator Drivercondrv Console DriverHdAudAddService Microsoft 1.1 UAA Function Driver for High Definition Audio ServiceHDAudBus Microsoft UAA Bus Driver for High Definition AudioHidUsb Microsoft HID Class DriverHTTP HTTP Serviceigfx igfxIntcDAud Intel(R) Display Audiointelppm Intel Processor Driver...
上記のコマンドには 2 つの Where-Object
要素がありますが、次のように -and
論理演算子を使用して 1 つのWhere-Object
要素で表現できます:
Get-CimInstance -Class Win32_SystemDriver | Where-Object {($_.State -eq 'Running') -and ($_.StartMode -eq 'Manual')} | Format-Table -Property Name,DisplayName
標準の論理演算子は次の表に示されています。
論理演算子 | 意味 | 例(真を返す) | |
---|---|---|---|
-and | Logical and.AND(論理的な)。 両辺が真であれば真 | (1 -eq 1) -and (2 -eq 2) | |
-or | Logical or.を返す。 どちらかが真なら真 | (1 -eq 1) -or (1 -eq 2) | |
-not | Logical not; 真偽反転 | -not (1 -eq 2) | |
! | は論理的で、真と偽を逆転させることができる。 | 論理的でない; 真と偽を反転させる | !(1 -eq 2) |