Compartir a través de


UseSingleValueFromPipelineParameter

Nivel de gravedad: Advertencia

Descripción

Los conjuntos de parámetros deberían tener como máximo un parámetro marcado como ValueFromPipeline = true.

Esta regla identifica funciones en las que múltiples parámetros dentro del mismo conjunto de parámetros se ValueFromPipeline han establecido en true (ya sea explícita o implícitamente).

Cómo

Asegúrate de que solo un parámetro por conjunto de parámetros acepte entrada de pipeline por valor. Si necesitas múltiples parámetros para aceptar diferentes tipos de entrada de pipeline, usa conjuntos de parámetros separados.

Ejemplo

Incorrecto

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

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

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

Corregir

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

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

Supresión

Para suprimir esta regla para un conjunto de parámetros específico, se utiliza el SuppressMessage atributo con el nombre del conjunto de parámetros:

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

Para el conjunto de parámetros por defecto, use 'default' como objetivo de supresión:

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

Notas

  • Esta regla se aplica tanto a explícito ValueFromPipeline = $true como implícito ValueFromPipeline (que es lo mismo que usar = $true)
  • Los parámetros con ValueFromPipeline=$false no se marcan por esta regla
  • La regla gestiona correctamente el conjunto de parámetros por defecto (__AllParameterSets) y los conjuntos de parámetros nombrados
  • Diferentes conjuntos de parámetros pueden tener cada uno su propio parámetro sin ValueFromPipeline activar esta regla