スクリプト
# 
# パイプのテスト
# 
function TestFunc
{
    param (
        [parameter(ValueFromPipeline=$true)]
        $val
    )
    begin
    {
        "TestFunc:Begin"
    }
    process 
    {
        "TestFunc(val:${val})"
    }
    end
    {
        "TestFunc:End"
    }
}
function TestFunc2
{
    param (
        [parameter(ValueFromPipeline=$true)]
        $val
    )
    begin
    {
        "TestFunc2:Begin"
    }
    process 
    {
        "TestFunc2(val:${val})"
    }
    end
    {
        "TestFunc2:End"
    }
}
function TestFunc3
{
    param (
        [parameter(ValueFromPipeline=$true)]
        $val
    )
    begin
    {
        "TestFunc3:Begin"
    }
    process 
    {
        "TestFunc3(val:${val})"
    }
    end
    {
        "TestFunc3:End"
    }
}
@(1..5) | TestFunc | TestFunc2 | TestFunc3結果
TestFunc3:Begin TestFunc3(val:TestFunc2:Begin) TestFunc3(val:TestFunc2(val:TestFunc:Begin)) TestFunc3(val:TestFunc2(val:TestFunc(val:1))) TestFunc3(val:TestFunc2(val:TestFunc(val:2))) TestFunc3(val:TestFunc2(val:TestFunc(val:3))) TestFunc3(val:TestFunc2(val:TestFunc(val:4))) TestFunc3(val:TestFunc2(val:TestFunc(val:5))) TestFunc3(val:TestFunc2(val:TestFunc:End)) TestFunc3(val:TestFunc2:End) TestFunc3:End
学んだこと
今回の例の場合、配列の最初の要素1→TestFunc→TestFunc2→TestFunc3→配列の2番目の要素2→TestFunc→TestFunc2→TestFunc3…と処理される。
beginやendの振る舞いをみると関数内で出力した内容が次の関数へ引き渡されている。引き渡された要素を関数内で意図的に出力をしないことで絞り込みをすることや、逆に出力を増やすことで要素を増やすことが出来ると思われる。
 
  
  
  
  

コメント