重大度レベル: 警告
デフォルト状態:常に有効
形容
このルールは、デフォルト値が $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の使用に関する「抑制ルール」セクションをご覧ください。