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.