PossibleIncorrectUsageOfAssignmentOperator

Nível de gravidade: de informações

Descrição

Essa regra detecta quando instruções condicionais usam = ou == em vez do operador de igualdade do PowerShell (-eq). A regra busca usos de == e operadores dentro =de , if, elseif, e while instruçõesdo-while. No PowerShell, = representa o operador de atribuição e -eq representa o operador de comparação de igualdade.

Em muitas linguagens de programação, == representa o operador de comparação de igualdade. Quando você define == em uma expressão PowerShell, incluindo instruções condicionais, PowerShell gera um erro porque == não é uma sintaxe válida do PowerShell. Essa regra sempre sinaliza usos de == em afirmações condicionais. No entanto, ele não sinaliza os usos de = quando o lado direito do condicional usa comandos ou expressões.

Nesses casos, é provável que o uso do operador de atribuição seja intencional. Essa construção é frequentemente usada para atribuir de forma concisa um valor à variável ou propriedade do lado esquerdo e verificar se o valor atribuído é avaliado como verdadeiro.

Supressão implícita usando o estilo Clang

Existem alguns casos raros em que atribuir uma variável dentro de uma if instrução é intencional. Em vez de suprimir a regra, você pode sinalizar que a tarefa é intencional envolvendo a expressão com parênteses extras. Uma exceção se aplica quando $null é usada do lado esquerdo, pois não há caso de uso para isso. Por exemplo:

if (($shortVariableName = $SuperLongVariableName['SpecialItem']['AnotherItem'])) {
    ...
}

Exemplo

Não Conforme

if ($a = $b)
{
    ...
}
if ($a == $b)
{

}

Em conformidade

if ($a -eq $b) # Compare $a with $b
{
    ...
}
if ($a = Get-Something) # Only execute action if command returns something and assign result to variable
{
    Do-SomethingWith $a
}