重症度レベル:警告
デフォルト状態:無効化
説明
このルールは、同じパラメータセット内の複数のパラメータが値によってパイプライン入力を受け入れているとマークされている関数を検出します。 パラメータセットは最大で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パラメータを持つことができます。