PossibleIncorrectUsageOfAssignmentOperator

Nível de gravidade: Informação

Descrição

Esta regra deteta quando as instruções condicionais usam = ou == substituem o operador de igualdade PowerShell (-eq). A regra procura usos de == e = operadores dentro ifde , elseif, while, e do-while instruções . 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 defines == numa expressão PowerShell, incluindo instruções condicionais, o PowerShell gera um erro porque == não é uma sintaxe válida do PowerShell. Esta regra sinaliza sempre os usos de == em instruções condicionais. No entanto, não sinaliza os usos de = quando o lado direito do condicional utiliza comandos ou expressões.

Nestes casos, é provável que a utilização do operador de atribuição seja intencional. Esta 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, pode sinalizar que a tarefa é intencional envolvendo a expressão com parênteses extra. Aplica-se uma exceção quando $null é usada do lado esquerdo porque não há um caso de uso para isso. Por exemplo:

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

Exemplo

Não conforme

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

}

Compliant

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
}