PossibleIncorrectUsageOfAssignmentOperator

重大度レベル: 情報

デフォルト状態:常に有効

形容

このルールは、条件文がPowerShellの等式演算子(=)の代わりに==または-eqを使用している場合を検出します。 このルールは、==、=、if、elseif文内でwhileおよびdo-while演算子の使用を探します。 PowerShellでは、 = は 割り当て演算子 を表し、 -eq は 等価比較演算子を表します。

多くのプログラミング言語では、 == は等価比較演算子を表します。 PowerShellの表現で条件付き文を含む == を定義すると、PowerShellは有効な構文でないためエラー == 発生します。 このルール は常に 条件文における == の使用をフラグ付けします。 ただし、条件文の右側がコマンドや表現を使っている場合は、 = の使用をフラグ付けしません。

この場合、割り当て演算子の使用は意図的である可能性が高いです。 この構成は、左側の変数や性質に値を簡潔に割り当て 、 割り当てられた値が真として評価されるかどうかを確認するためによく用いられます。

Clang スタイルを使用した暗黙的な抑制

if文内に変数を割り当てることが意図的に行われる稀なケースもあります。 ルールを抑制する代わりに、表現を余分な括弧で囲んで意図的であることを示すことができます。 左側で $null が使われている場合は例外で、ユースケースがありません。 例えば次が挙げられます。

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

例

非準拠

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

}

対応

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
}

ルールの設定

このルールは常に有効で、設定はできません。 このルールを避けるために、以下のいずれかの方法を用いてください。

  • 欲しいルールだけを含めるか、不要なルールを除外するカスタムルール設定ファイルを作成しましょう。
  • 特定のコードブロックに対してルール抑制を抑制するために、適切なルール抑制属性をコードに追加してください。 詳細については、PSScriptAnalyzerの使用に関する「抑制ルール」セクションをご覧ください。