AvoidDefaultValueSwitchParameter

重大度レベル: 警告

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

形容

このルールは、デフォルト値が $trueが割り当てられたスイッチパラメータを検出します。 スイッチのパラメータはデフォルトであってはいけません。 設計上、スイッチパラメータは指定されていない場合は $false され、コマンドに含まれる場合は $true されます。 スイッチパラメータにデフォルト値を $true 割り当てることはこの設計原則に反し、予期せぬ挙動を引き起こす可能性があります。

パラメータがtrueとfalseの値のみを受け入れる必要がある場合は、[Switch]ではなく[Boolean]型を使いましょう。 PowerShellはデフォルト値を必要とせず、スイッチパラメータを自動的に正しく処理します。

この問題を解決するには、スイッチのパラメータ宣言からデフォルト値を外してください。 スイッチは指定されていない場合、自然に $false にデフォルトで表示されるため、ロジックが発信者の入力に適切に応答できるようにします。

詳細については、「 強く推奨される開発ガイドライン」をご覧ください。

例

非準拠

function Test-Script
{
    [CmdletBinding()]
    Param
    (
        [String]
        $Param1,

        [switch]
        $Switch=$True
    )
    ...
}

対応

function Test-Script
{
    [CmdletBinding()]
    Param
    (
        [String]
        $Param1,

        [switch]
        $Switch
    )

    ...
}

ルールの設定

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

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