PossibleIncorrectUsageOfAssignmentOperator

allvarlighetsgrad: Information

Beskrivning

Denna regel upptäcker när villkorliga satser använder = eller == istället för PowerShell-likhetsoperatorn (-eq). Regeln letar efter användningar av == och = operatorer inom if, elseif, while, och do-while satser. I PowerShell = representerar tilldelningsoperatorn och -eq representerar likhetsjämförelseoperatorn.

I många programmeringsspråk == representerar likhetsjämförelseoperatorn. När du definierar == i ett PowerShell-uttryck, inklusive villkorssatser, ger PowerShell ett fel eftersom == PowerShell inte är giltig PowerShell-syntax. Denna regel flaggar alltid användning av == i villkorssatser. Den markerar dock inte användningar av = när högersidan av villkoret använder några kommandon eller uttryck.

I dessa fall är det troligt att användningen av tilldelningsoperatorn är avsiktlig. Denna konstruktion används ofta för att kortfattat tilldela ett värde till variabeln eller egenskapen på vänster sida och kontrollera om det tilldelade värdet utvärderas som sant.

Implicit undertryckning med Clang-format

Det finns några sällsynta fall där det är avsiktligt att tilldela en variabel i ett if påstående. Istället för att undertrycka regeln kan du signalera att uppgiften är avsiktlig genom att slå in uttrycket i extra parenteser. Ett undantag gäller när $null det används på vänster sida eftersom det inte finns något användningsfall för det. Ett exempel:

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

Exempel

Ej överensstämmande

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

}

Godkänd

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
}