Compartir a través de


UseNombreConjuntoParameterConsistente

Nivel de gravedad: Advertencia

Descripción

Los nombres de los conjuntos de parámetros en PowerShell son sensibles a mayúsculas y minúsculas, a diferencia de la mayoría de los otros elementos de PowerShell. Esta regla garantiza una carcasa consistente y una configuración adecuada de los conjuntos de parámetros para evitar errores en tiempo de ejecución y mejorar la claridad del código.

La regla realiza cinco comprobaciones diferentes:

  1. Falta DefaultParameterSetName - Avisa cuando se usan conjuntos de parámetros pero no se especifica ningún valor predeterminado
  2. Declaraciones de múltiples parámetros - Detecta cuando un parámetro se declara varias veces en el mismo conjunto de parámetros. Esto es, en última instancia, una excepción en tiempo de ejecución: esta comprobación ayuda a detectarlo antes.
  3. Desajuste de mayúsculas entre DefaultParameterSetName y ParameterSetName - Garantiza una carcasa coherente
  4. Desajuste de mayúsculas entre diferentes valores de ParameterSetName - Garantiza que todas las referencias al mismo conjunto de parámetros usen carcasa idéntica
  5. Nombres de conjuntos de parámetros que contienen nuevas líneas - Advertencia contra el uso de caracteres de nueva línea en los nombres de los conjuntos de parámetros

Nota:

Esta regla no está activada por defecto. El usuario debe habilitarlo a través de la configuración.

Cómo

  • Usa a DefaultParameterSetName al definir conjuntos de múltiples parámetros
  • Asegura que la carcasa entre DefaultParameterSetName valores y ParameterSetName
  • Utiliza carcasa idéntica para todas las referencias al mismo nombre de conjunto de parámetros
  • Evita declarar el mismo parámetro varias veces en un solo conjunto de parámetros
  • No uses caracteres de nueva línea en los nombres de conjuntos de parámetros

Ejemplo

Incorrecto

# Missing DefaultParameterSetName
function Get-Data {
    [CmdletBinding()]
    param(
        [Parameter(ParameterSetName='ByName')]
        [string]$Name,

        [Parameter(ParameterSetName='ByID')]
        [int]$ID
    )
}

# Case mismatch between DefaultParameterSetName and ParameterSetName
function Get-Data {
    [CmdletBinding(DefaultParameterSetName='ByName')]
    param(
        [Parameter(ParameterSetName='byname')]
        [string]$Name,

        [Parameter(ParameterSetName='ByID')]
        [int]$ID
    )
}

# Inconsistent casing between ParameterSetName values
function Get-Data {
    [CmdletBinding(DefaultParameterSetName='ByName')]
    param(
        [Parameter(ParameterSetName='ByName')]
        [string]$Name,

        [Parameter(ParameterSetName='byname')]
        [string]$DisplayName
    )
}

# Multiple parameter declarations in same set
function Get-Data {
    param(
        [Parameter(ParameterSetName='ByName')]
        [Parameter(ParameterSetName='ByName')]
        [string]$Name
    )
}

# Parameter set name with newline
function Get-Data {
    param(
        [Parameter(ParameterSetName="Set`nOne")]
        [string]$Name
    )
}

Corregir

# Proper parameter set configuration
function Get-Data {
    [CmdletBinding(DefaultParameterSetName='ByName')]
    param(
        [Parameter(ParameterSetName='ByName', Mandatory)]
        [string]$Name,

        [Parameter(ParameterSetName='ByName')]
        [Parameter(ParameterSetName='ByID')]
        [string]$ComputerName,

        [Parameter(ParameterSetName='ByID', Mandatory)]
        [int]$ID
    )
}

Configuración

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

Parámetros

  • Enable: bool (El valor por defecto es $false)

    Habilite o deshabilite la regla durante la invocación de ScriptAnalyzer.

Notas

  • Los nombres de los conjuntos de parámetros son sensibles a mayúsculas y minúsculas en PowerShell, lo que lo hace diferente de la mayoría de los demás elementos de PowerShell
  • La primera aparición de un nombre de conjunto de parámetros en tu código se trata como la carcasa canónica
  • Los parámetros sin [Parameter()] atributos forman automáticamente parte de todos los conjuntos de parámetros
  • Es una buena práctica en PowerShell especificar siempre una DefaultParameterSetName al usar conjuntos de parámetros