严重性级别:警告
默认状态:始终启用
描述
该规则检测被赋予默认值的 $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 中的“抑制规则”部分。