2011年10月13日木曜日

◆Where-Object、Foreach-Objectの簡略表現(V3)

{}を省略出来るようになったらしい。

それに伴って、プロパテイ参照時の$_も不要になっている。

ps  |  ? name –like p*  |  % processname

2011-10-13 11h49_02

ただし、Foreach-Objectはプロパティ表示以外の使い方が出来るのかどうかはよく判らなかった。

フィルターはすっきりして良い感じだ。

4 件のコメント:

  1. V3の記事が始まりましたね。
    興味深く拝見させていただいてます。

    ForEach-Objectですが、Get-Helpで構文を見ると、

    ForEach-Object [-MemberName] [-InputObject ] [-ArgumentList ] [-WhatIf] [-Confirm] []

    となっています。-MemberNameであり-PropertyNameではなく、-ArgumentListというパラメータもあるのでメソッドもいけるのでは?と思い、やってみました。

    結果、

    PS C:\> 1,2,3|% tostring 00#
    001
    002
    003

    みたいな感じでいけました。

    このように、簡略表記と言われていますが、実際は単にコマンドレットの構文が追加されただけだったりします
    Where-Objectの構文拡張はなかなか力技で、最初見た時は、うっ、となりました^^;
    ぜひGet-Helpで構文見てみてください。

    返信削除
  2. あ、<>がタグと見なされて削られてしまいました。

    返信削除
  3. いつもありがとうございます。

    ん、どうも更新の仕方が悪かったのか私の環境のHELPではこれまでどおりのSyntaxで表示されてしまいます。
    でも確かにISEのインテリセンスやタブ補完ではMemberNameとかも表示されますね。

    ScriptBlock表現の簡略化ではなく、新たなパラメーターでの実装であれば今回の動作は納得です。
    % name + "suffix"
    とかやってエラーになって悩んでいました。

    返信削除
  4. ver.3には現在のところヘルプファイルが存在しないので、Get-Helpでコマンドレットを調べると、そのシンタックスはアセンブリの属性情報を元に表示されます。

    しかしver.2環境にver.3を上書きだと、ver.2のヘルプファイルがそのまま使われるのかもしれませんね。私はWindows Server 8 DP上のPSv3を評価しているので、新しいシンタックスを表示できるようです。

    返信削除