7

解決済み:

以下は、パイプ入力を使用する関数/スクリプトの最も単純な例です。それぞれが「echo」コマンドレットへのパイプと同じように動作します。

関数として:

Function Echo-Pipe {
  Begin {
    # Executes once before first item in pipeline is processed
  }

  Process {
    # Executes once for each pipeline object
    echo $_
  }

  End {
    # Executes once after last pipeline object is processed
  }
}

Function Echo-Pipe2 {
    foreach ($i in $input) {
        $i
    }
}

スクリプトとして:

# エコーパイプ.ps1
  Begin {
    # Executes once before first item in pipeline is processed
  }

  Process {
    # Executes once for each pipeline object
    echo $_
  }

  End {
    # Executes once after last pipeline object is processed
  }
# Echo-Pipe2.ps1
foreach ($i in $input) {
    $i
}

例えば

PS > . theFileThatContainsTheFunctions.ps1 # This includes the functions into your session
PS > echo "hello world" | Echo-Pipe
hello world
PS > cat aFileWithThreeTestLines.txt | Echo-Pipe2
The first test line
The second test line
The third test line
4

1 に答える 1

14

上記の基本的なアプローチの代わりに、高度な機能を使用するオプションもあります。

function set-something { 
    param(
        [Parameter(ValueFromPipeline=$true)]
        $piped
    )

    # do something with $piped
}

パイプライン入力に直接バインドできるパラメーターは 1 つだけであることは明らかです。ただし、複数のパラメーターをパイプライン入力の異なるプロパティにバインドすることができます。

function set-something { 
    param(
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        $Prop1,

        [Parameter(ValueFromPipelineByPropertyName=$true)]
        $Prop2,
    )

    # do something with $prop1 and $prop2
}

これが、別のシェルを学ぶ旅に役立つことを願っています。

于 2012-08-31T15:32:39.187 に答える