17

ifパイプライン内で使用しようとしています。

where(alias ) フィルターがあることは知っていますが?、特定の条件が満たされた場合にのみフィルターをアクティブにしたい場合はどうすればよいですか?

たとえば、次のようになります。

何かを得る | ? {$_.someone -eq 'somespecific'} | フォーマットテーブル

ifフィルターのオン/オフを切り替えるためにパイプライン内で使用する方法は? 出来ますか?それは理にかなっていますか?

ありがとう

明確にするために編集

パイプラインがないと、次のようになります。

if($フィルター) {
 何かを得る | ? {$_.someone -eq 'somespecific'}
}
そうしないと {
 何かを得ます
}

ANSWERのriknikの後に編集

私が探していたものを示すばかげた例。変数に格納されたデータの非正規化テーブルがあり$data、一種の「ドリルダウン」データ フィルタリングを実行したいとします。

関数データフィルタ {
param([スイッチ]$先祖、
    [スイッチ]$親、
    [スイッチ]$子、
    [文字列]$myancestor,
    [文字列]$myparent,
    [文字列]$mychild,
    [配列]$data=[])

$データ |
? { (!$ancestor) -or ($_.ancestor -match $myancestor) } |
? { (!$parent) -or ($_.parent -match $myparent) } |
? { (!$child) -or ($_.child -match $mychild) } |

}

たとえば、特定の親のみでフィルタリングしたい場合:

datafilter -parent -myparent 'myparent' -data $mydata

これは、非常にエレガントでパフォーマンスが高く、簡単に悪用できる方法?です。を使って同じことをやってみれば、私のif言いたいことが理解できるでしょう。

4

3 に答える 3

15

where-object を使用する場合、条件は、パイプラインを通過するオブジェクトに厳密に関連付ける必要はありません。そこで、他の条件が満たされた場合にのみ、奇妙なオブジェクトをフィルタリングしたい場合を考えてみましょう:

$filter = $true
1..10 | ? { (-not $filter) -or ($_ % 2) }

$filter = $false
1..10 | ? { (-not $filter) -or ($_ % 2) }

これはあなたが探しているものですか?

于 2011-04-27T21:06:54.560 に答える
2

私の答えがあなたに役立つかどうかはわかりませんが、試してみます:)

1..10 | % {if ($_ % 2 -eq 0) {$_}} 

ご覧のとおり、ループを使用し、1 から 10 までの各数値について、偶数かどうかを確認し、この場合にのみ表示します。

于 2011-04-27T20:02:23.987 に答える