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 中的“抑制规则”部分。