Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Falta DefaultParameterSetName - Avisa cuando se usan conjuntos de parámetros pero no se especifica ningún valor predeterminado
- 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.
- Desajuste de mayúsculas entre DefaultParameterSetName y ParameterSetName - Garantiza una carcasa coherente
- Desajuste de mayúsculas entre diferentes valores de ParameterSetName - Garantiza que todas las referencias al mismo conjunto de parámetros usen carcasa idéntica
- 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
DefaultParameterSetNameal definir conjuntos de múltiples parámetros - Asegura que la carcasa entre
DefaultParameterSetNamevalores yParameterSetName - 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
DefaultParameterSetNameal usar conjuntos de parámetros