UseProcessBlockForPipelineCommand

重症度レベル:警告

デフォルト状態:常に有効

説明

このルールは、プロセスブロックを使わずに関数本体で直接入力を処理するパイプライン対応パラメータを持つ関数を検出します。 パラメータを通じてパイプライン入力を受け入れる関数は、常にプロセスブロック内でその入力を処理するべきです。 関数ボディ内でパラメータ入力を直接処理すると、関数ボディは1回だけ実行し、プロセスブロックはパイプライン内の各オブジェクトごとに実行されるため、予期しない挙動を引き起こすことがあります。

Example

非準拠

Function Get-Number
{
    [CmdletBinding()]
    Param(
        [Parameter(ValueFromPipeline)]
        [int]
        $Number
    )

    $Number
}

対応

Function Get-Number
{
    [CmdletBinding()]
    Param(
        [Parameter(ValueFromPipeline)]
        [int]
        $Number
    )

    process
    {
        $Number
    }
}

ルールの設定

このルールは常に有効で、設定はできません。 このルールを避けるために、以下のいずれかの方法を用いてください。

  • 欲しいルールだけを含めるか、不要なルールを除外するカスタムルール設定ファイルを作成しましょう。
  • 特定のコードブロックに対してルール抑制を抑制するために、適切なルール抑制属性をコードに追加してください。 詳細については、PSScriptAnalyzerの使用に関する「抑制ルール」セクションをご覧ください。