Where-Objectのお話

知らないと損する系
僕はすごく損してた

Where-Objectですよ
つまりwhere
そして?

PS> ls | ? {
    $_.Name -match 'hoge'
}

とか書いてたわけですよ今まで
必ずScriptBlock渡すもんだと思ってたんですよ、盲目的に

PS> help Where-Object

出力見てびっくり
やだ…whereのParameterSet多すぎ…?

ちょっと良く見てみました
そこで知る驚愕の事実

馴染みの書き方はこれ

Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>]  [<CommonParameters>]
PS> help where -Parameter filter*

-FilterScript <scriptblock>

    必須                         true
    位置                         0
    パイプライン入力を許可する   false
    パラメーター セット名           ScriptBlockSet
    エイリアス                      なし
    動的                     false

ScriptBlockSetというパラメータセットらしい

で、ですよ、それ以外のパラメータセットのお話ですよ
上で書いてたのと同じのがこんな風に書ける

PS> ls | ? -Property Name -Match hoge

はい
さらに-PropertyPosition=0なので

PS> ls | ? Name -Match hoge

短い
そして$_を書かなくていい
あとhogeのとこもクォートで括らなくてもだいたい文字列扱いされる
-match演算子の後だと文字列は必ずクォートで括っとかないといけないからね
その手間も省ける

Match以外も比較演算子がそのままパラメータになってるので例えば

PS> ls | ? Name -EQ hoge.txt
PS> ls | ? Name -Like *hoge*
PS> ls | ? LastWriteTime -GT 7/1

こんな感じで書ける
(これらの比較演算子風パラメータが沢山あるおかげで、パラメータセットも沢山あるんだ)

いやぁ、目からうろこでした

当然whereでいろいろ処理書きたいならScriptBlock使えばいいけど、なかなかそういうことってないからね
今後whereはさっぱり書きます!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中