Поделиться через


UseSingleValueFromPipelineParameter

Уровень тяжести: Предупреждение

Описание

Наборы параметров должны иметь не более одного параметра, обозначенного как ValueFromPipeline = true.

Это правило определяет функции, для которых несколько параметров в одном наборе ValueFromPipeline параметров установлены ( true явно или неявно).

Как

Убедитесь, что только один параметр на набор параметров принимает входные данные конвейера по значениям. Если для принятия разных типов входов в конвейер нужны несколько параметров, используйте отдельные наборы параметров.

Пример

Неправильный

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"
    }
}

Подавление

Чтобы исключить это правило для конкретного набора параметров, используйте 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 параметр без активации этого правила