Set-StrictMode
Estabelece e impõe regras de codificação em expressões, scripts e blocos de script.
Sintaxe
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Description
O Set-StrictMode
cmdlet configura o modo estrito para o escopo atual e todos os escopos filho e o ativa e o desativa. Quando o modo estrito está ativado, o PowerShell gera um erro de encerramento quando o conteúdo de uma expressão, script ou bloco de script viola as regras básicas de codificação de práticas recomendadas.
Use o parâmetro Version para determinar as regras de codificação a serem impostas.
Set-PSDebug -Strict
cmdlet ativa o modo estrito para o escopo global. Set-StrictMode
afeta apenas o escopo atual e seus escopos filho. Em seguida, você pode usá-lo em um script ou função para substituir a configuração herdada do escopo global.
Quando Set-StrictMode
está desativado, o PowerShell tem os seguintes comportamentos:
- Presume-se que as variáveis não inicializadas tenham um valor de (zero) ou
$Null
, dependendo do0
tipo - Referências a propriedades inexistentes retornam
$Null
- Os resultados da sintaxe da função imprópria variam com as condições de erro
- A tentativa de recuperar um valor usando um índice inválido em uma matriz retorna
$Null
Exemplos
Exemplo 1: Ativar o modo estrito como versão 1.0
# Strict mode is off by default.
$a -gt 5
False
Set-StrictMode -Version 1.0
$a -gt 5
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
Com o modo estrito definido como versão 1.0
, as tentativas de referência a variáveis que não são inicializadas falham.
Exemplo 2: Ativar o modo estrito como versão 2.0
# Strict mode is off by default.
function add ($a, $b) {
'$a = ' + $a
'$b = ' + $b
'$a+$b = ' + ($a + $b)
}
add 3 4
$a = 3
$b = 4
$a+$b = 7
add(3,4)
$a = 3 4
$b =
$a+$b = 3 4
Set-StrictMode -Version 2.0
add(3,4)
InvalidOperation: The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.
Set-StrictMode -Off
$string = "This is a string."
$null -eq $string.Month
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month
PropertyNotFoundException: The property 'Month' cannot be found on this object. Verify that the property exists.
Este comando ativa o modo estrito e o define como versão 2.0
. Como resultado, o PowerShell retornará um erro se você usar a sintaxe do método, que usa parênteses e vírgulas, para uma chamada de função ou fazer referência a variáveis não inicializadas ou propriedades inexistentes.
A saída de exemplo mostra o efeito do modo estrito de versão 2.0
.
Sem o modo estrito de versão 2.0
, o (3,4)
valor é interpretado como um único objeto de matriz ao qual nada é adicionado. Com o modo estrito de versão 2.0
, é corretamente interpretado como sintaxe defeituosa para enviar dois valores.
Sem versão 2.0
, a referência à propriedade Month inexistente de uma cadeia de caracteres retorna apenas $Null
. Com a versão 2.0
, é interpretado corretamente como um erro de referência.
Exemplo 3: Ativar o modo estrito como versão 3.0
Com o modo estrito definido como Desativado, índices inválidos ou fora dos limites retornam valores nulos.
# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
True
True
Set-StrictMode -Version 3.0
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']
OperationStopped: Index was outside the bounds of the array.
InvalidArgument: Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
Com o modo estrito definido como versão 3
ou superior, índices inválidos ou fora dos limites resultam em erros.
Parâmetros
-Off
Indica que esse cmdlet desativa o modo estrito para o escopo atual e todos os escopos filho.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Version
Especifica as condições que causam um erro no modo estrito. Este parâmetro aceita qualquer número de versão válido do PowerShell. Qualquer número superior a 3
.Latest
O valor fornecido deve ser a cadeia de caracteres Latest
ou uma cadeia de caracteres que pode ser convertida em um tipo System.Version . A versão deve corresponder a uma versão de lançamento válida do PowerShell.
Os valores efetivos para este parâmetro são:
1.0
- Proíbe referências a variáveis não inicializadas, exceto para variáveis não inicializadas em cadeias de caracteres.
2.0
- Proíbe referências a variáveis não inicializadas. Isso inclui variáveis não inicializadas em cadeias de caracteres.
- Proíbe referências a propriedades inexistentes de um objeto.
- Proíbe chamadas de função que usam a sintaxe para chamar métodos.
3.0
- Proíbe referências a variáveis não inicializadas. Isso inclui variáveis não inicializadas em cadeias de caracteres.
- Proíbe referências a propriedades inexistentes de um objeto.
- Proíbe chamadas de função que usam a sintaxe para chamar métodos.
- Proibir índices de matriz fora dos limites ou insolúveis.
Latest
- Seleciona a versão mais recente disponível. A última versão é a mais rigorosa. Use esse valor para garantir que os scripts usem a versão mais rigorosa disponível, mesmo quando novas versões são adicionadas ao PowerShell.
Atenção
Usar Latest
for Version em scripts não é determinístico. O significado de Latest
pode mudar em novas versões do PowerShell. Um script escrito para uma versão mais antiga do PowerShell que usa Set-StrictMode -Version Latest
está sujeito a regras mais restritivas quando executado em uma versão mais recente do PowerShell.
Tipo: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
Entradas
None
Não é possível canalizar objetos para este cmdlet.
Saídas
None
Este cmdlet não retorna nenhuma saída.
Notas
Embora o parâmetro Version aceite valores maiores que 3.0
, não há regras adicionais definidas para nada maior que 3.0
.
Set-StrictMode
é eficaz apenas no âmbito em que está definido e nos seus âmbitos subordinados. Para obter mais informações sobre escopos no PowerShell, consulte about_Scopes.