Compartilhar via


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 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 O 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:

  • Supõe-se que variáveis não inicializadas tenham um valor de (zero) ou $Null, dependendo do 0 tipo
  • Referências a propriedades inexistentes retornam $Null
  • Os resultados da sintaxe de função inadequada variam de acordo 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

The variable $a cannot be retrieved because it has not been set yet.

At line:1 char:3
+ $a <<<<  -gt 5
+ CategoryInfo          : InvalidOperation: (a:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined

Com o modo estrito definido como version 1.0, as tentativas de referenciar variáveis que não foram 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)

The function or command was called like a method. Parameters should be separated by spaces,
as described in 'Get-Help about_Parameter.'
At line:1 char:4
+ add <<<< (3,4)
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : StrictModeFunctionCallWithParens

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

Property 'Month' cannot be found on this object; make sure it exists.
At line:1 char:9
+ $string. <<<< month
+ CategoryInfo          : InvalidOperation: (.:OperatorToken) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFoundStrict

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 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 , ele é interpretado corretamente como sintaxe incorreta para enviar dois valores.

Sem version 2.0, a referência à propriedade Month inexistente de uma string 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, os índices inválidos ou fora dos limites resultam em 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']

Index was outside the bounds of the array.
At line:1 char:1
+ $null -eq $a[2]
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], IndexOutOfRangeException
    + FullyQualifiedErrorId : System.IndexOutOfRangeException

Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $null -eq $a['abc']
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

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
Cargo:Named
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-Version

Especifica as condições que causam um erro no modo estrito. Esse parâmetro aceita qualquer número de versão válido do PowerShell. Qualquer número maior que é 3 tratado como 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 esse 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 não resolvidos.
  • Latest
    • Seleciona a versão mais recente disponível. A versão mais recente é a mais rigorosa. Use esse valor para garantir que os scripts usem a versão mais estrita disponível, mesmo quando novas versões forem adicionadas ao PowerShell.

Cuidado

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
Cargo:Named
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

Entradas

None

Você não pode canalizar objetos para esse cmdlet.

Saídas

None

Esse cmdlet não retorna nenhuma saída.

Observações

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 escopo em que está definido e em seus escopos filho. Para obter mais informações sobre escopos no PowerShell, consulte about_Scopes.