Compartilhar via


Set-StrictMode

Estabelece e impõe regras de codificação em expressões, scripts e blocos de scripts.

Sintaxe

Set-StrictMode -Off [<CommonParameters>]

Set-StrictMode -Version <Version> [<CommonParameters>]

Descrição

O cmdlet Set-StrictMode 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 Windows PowerShell gera um erro fatal quando o conteúdo de uma expressão, um script, ou um bloco de scripts viola regras básicas de codificação recomendadas.

Use o parâmetro Version para determinar quais regras de codificação são impostas.

Ao contrário do cmdlet Set-PSDebug, Set-StrictMode afeta apenas o escopo atual e seus escopos filho. Assim, você pode usá-lo em um script ou em uma função sem afetar o escopo global.

Quando Set-StrictMode está desativado, presume-se que as variáveis não inicializadas (Versão 1) tenham um valor igual a 0 (zero) ou $null, dependendo do tipo. As referências a propriedades inexistentes retornam $null, e os resultados da sintaxe de função que não é válida variam com o erro. Não são permitidas variáveis sem nome.

Parâmetros

-Off

Desativa o modo estrito. Esse parâmetro também desativa "Set-PSDebug -Strict".

Necessário?

true

Posição?

named

Valor padrão

Nenhum

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

-Version <Version>

Especifica as condições que causam um erro no modo estrito. Esse parâmetro é obrigatório.

Os valores válidos são: "1.0", "2.0" e "Latest". A lista a seguir mostra o efeito de cada valor.

1.0

-- Proíbe referências a variáveis não inicializadas, exceto as variáveis não inicializadas em cadeias de caracteres.

2.0

-- Proíbe referências a variáveis não inicializadas (inclusive 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.

-- Proíbe uma variável sem um nome (${}).

Latest:

--Seleciona a versão mais recente (mais estrita) disponível. Use esse valor para assegurar que os scripts usem a versão mais estrita disponível, mesmo quando novas versões forem adicionadas ao Windows PowerShell.

Necessário?

true

Posição?

named

Valor padrão

Nenhum

Aceitar entrada do pipeline?

false

Aceitar caracteres curinga?

false

<CommonParameters>

Esse cmdlet oferece suporte aos parâmetros comuns: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Para obter mais informações, consulte about_Commonparameters.

Entradas e saídas

O tipo de entrada é o tipo dos objetos que você pode canalizar para o cmdlet. O tipo de retorno é o tipo dos objetos que o cmdlet retorna.

Entradas

Nenhum

Você não pode canalizar a entrada para este cmdlet.

Saídas

Nenhum

Este cmdlet não retorna nenhuma saída.

Observações

Set-StrictMode é semelhante ao parâmetro Strict de Set-PSDebug. "Set-Strictmode -version 1" é equivalente a "Set-PSDebug -strict", exceto pelo fato de Set-PSDebug estar em vigor em todos os escopos. Set-StrictMode está em vigor apenas no escopo em que está definido e em seus escopos filho. Para obter mais informações sobre escopos no Windows PowerShell, consulte about_Scopes.

Exemplo 1

C:\PS>set-strictmode -version 1.0

C:\PS> $a -gt 5
False
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

Descrição
-----------
Esse comando ativa o modo estrito e o define para a versão 1.0. Como resultado, as tentativas de referenciar variáveis que não são inicializadas falhará.

O exemplo de saída mostra o efeito da versão 1.0 do modo estrito.





Exemplo 2

C:\PS># set-strictmode -version 2.0

# Strict mode is off by default.

C:\PS> function add ($a, $b) {$a + $b}
C:\PS> add 3 4
7
C:\PS> add(3,4)
3
4

C:\PS> set-strictmode -version 2.0

C:\PS> 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


C:\PS> set-strictmode -off

C:\PS> $string = "This is a string".
C:\PS> $string.Month
C:\PS>

C:\PS> set-strictmode -version 2.0

C:\PS> $string = "This is a string".
C:\PS> $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

Descrição
-----------
Esse comando ativa o modo estrito e o define para a versão 2.0. Como resultado, o Windows PowerShell emitirá um erro se você usar a sintaxe de método (parênteses e vírgulas) para uma chamada de função ou se fizer referência a variáveis não inicializadas ou a propriedades não existentes.

O exemplo de saída mostra o efeito da versão 2.0 do modo estrito.

Sem a versão 2.0 do modo estrito, o valor "(3,4)" será interpretado como um único objeto de matriz, ao qual nada é adicionado. Com a versão 2.0 do modo estrito, ele é corretamente interpretado como uma sintaxe defeituosa por enviar dois valores.

Sem a versão 2.0, a referência à propriedade Month inexistente de uma cadeia de caracteres retorna apenas nulo. Com a versão 2.0, ela é interpretada corretamente como um erro de referência.





Consulte também

Conceitos

about_Debuggers
about_Scopes
Set-PSDebug