UseSingleValueFromPipelineParameter

重症度レベル:警告

デフォルト状態:無効化

説明

このルールは、同じパラメータセット内の複数のパラメータが値によってパイプライン入力を受け入れているとマークされている関数を検出します。 パラメータセットは最大で1つのパラメータで ValueFromPipeline = trueを持つべきです。

異なる種類のパイプライン入力を受け入れるために複数のパラメータが必要な場合は、別々のパラメータセットを使いましょう。 各パラメータセットは単一の ValueFromPipeline パラメータを持つことができますが、同じパラメータセット内に複数は持ってはいけません。

例

非準拠

function Process-Data {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline)]
        [string] $InputData,

        [Parameter(ValueFromPipeline)]
        [string] $ProcessingMode
    )

    process {
        Write-Output "$ProcessingMode`: $InputData"
    }
}

対応

function Process-Data {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline)]
        [string] $InputData,

        [Parameter(Mandatory)]
        [string] $ProcessingMode
    )
    process {
        Write-Output "$ProcessingMode`: $InputData"
    }
}

ルールの設定

Rules = @{
    PSUseSingleValueFromPipelineParameter  = @{
        Enable = $true
    }
}

Parameters

Enable

このパラメータは、ScriptAnalyzerがこのルールに対してコードをチェックするかどうかを制御します。 ブール値も受け入れます。 このルールを有効にするには、このパラメータを $trueに設定します。 既定値は $false です。

Suppression

このルールはデフォルトで無効化されています。 設定で有効にしていて特定の機能のために抑制したい場合は、 SuppressMessage 属性を使用できます:

function Process-Data {
    [Diagnostics.CodeAnalysis.SuppressMessage('PSUseSingleValueFromPipelineParameter', 'MyParameterSet')]
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline, ParameterSetName='MyParameterSet')]
        [string] $InputData,

        [Parameter(ValueFromPipeline, ParameterSetName='MyParameterSet')]
        [string] $ProcessingMode
    )
    process {
        Write-Output "$ProcessingMode`: $InputData"
    }
}

デフォルトのパラメータセットでは、 'default' を抑制ターゲットとして使用します。

[Diagnostics.CodeAnalysis.SuppressMessage('PSUseSingleValueFromPipelineParameter', 'default')]

メモ

  • このルールは明示的 ValueFromPipeline = $true と暗黙の ValueFromPipeline の両方に適用されます(暗黙のは = $trueを使うのと同じです)。
  • このルールはパラメータを ValueFromPipeline = $falseでフラグ付けしません。
  • このルールはデフォルトのパラメータセット(__AllParameterSets)と名前付きパラメータセットを正しく扱います。
  • 異なるパラメータセットは、このルールをトリガーせずにそれぞれ独自の ValueFromPipeline パラメータを持つことができます。