Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nível de Gravidade: Aviso
Descrição
Os nomes dos conjuntos de parâmetros no PowerShell são diferenciados em maiúsculas e minúsculas, ao contrário da maioria dos outros elementos do PowerShell. Essa regra garante uma carcaça consistente e a configuração adequada dos conjuntos de parâmetros para evitar erros de execução e melhorar a clareza do código.
A regra realiza cinco testes diferentes:
- Falta de DefaultParameterSetName - Avisa quando conjuntos de parâmetros são usados, mas nenhum padrão é especificado
- Múltiplas declarações de parâmetros - Detecta quando um parâmetro é declarado várias vezes no mesmo conjunto de parâmetros. Isso é, no fim das contas, uma exceção em tempo de execução – essa verificação ajuda a detectar mais cedo.
- Incompatibilidade de case entre DefaultParameterSetName e ParameterSetName - Garante a consistência do case
- Incompatibilidade de casos entre diferentes valores ParameterSetName - Garante que todas as referências ao mesmo conjunto de parâmetros usem carcaças idênticas
- Nomes de conjuntos de parâmetros contendo novas linhas - Alerta contra o uso de caracteres de nova linha nos nomes dos conjuntos de parâmetros
Observação
Essa regra não está ativada por padrão. O usuário precisa habilitá-lo pelas configurações.
Como
- Use a
DefaultParameterSetNameao definir múltiplos conjuntos de parâmetros - Garanta uma carcaça consistente entre
DefaultParameterSetNamevalores eParameterSetName - Use carcaça idêntica para todas as referências ao mesmo nome de conjunto de parâmetros
- Evite declarar o mesmo parâmetro várias vezes em um único conjunto de parâmetros
- Não use caracteres de nova linha em nomes de conjuntos de parâmetros
Exemplo
Errado
# 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
)
}
Correto
# 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
)
}
Configuração
Rules = @{
PSUseConsistentParameterSetName = @{
Enable = $true
}
}
Parâmetros
Enable: bool (Valor padrão é$false)Habilite ou desabilite a regra durante a invocação de ScriptAnalyzer.
Observações
- Os nomes dos conjuntos de parâmetros são sensíveis a maiúsculas minúsculas no PowerShell, tornando isso diferente da maioria dos outros elementos do PowerShell
- A primeira ocorrência de um nome de conjunto de parâmetros no seu código é tratada como a carcaça canônica
- Parâmetros sem
[Parameter()]atributos fazem automaticamente parte de todos os conjuntos de parâmetros - É uma boa prática do PowerShell sempre especificar a
DefaultParameterSetNameao usar conjuntos de parâmetros