Powershell:如何在参数中正确实现模式切换?

Powershell:如何在参数中正确实现模式切换?,powershell,parameters,Powershell,Parameters,我的函数中有一个代码对我来说很好,它是受另一个SO答案的启发,但在VSCode中被标记为不正确。我想改进它,但目前我不知道如何改进 Param( [Parameter( Mandatory = $True, ValueFromPipelineByPropertyName = $true, Position = 0, ParameterSetName = "Info")]

我的函数中有一个代码对我来说很好,它是受另一个SO答案的启发,但在VSCode中被标记为不正确。我想改进它,但目前我不知道如何改进

Param(
    [Parameter( Mandatory = $True,
                ValueFromPipelineByPropertyName = $true,
                Position = 0,
                ParameterSetName = "Info")]
    [switch] $Info = $false,

    [Parameter( Mandatory = $True,
                ValueFromPipelineByPropertyName = $true,
                Position = 0,
                ParameterSetName = "Warn")]
    [switch] $Warn = $false,

    [Parameter( Mandatory = $True,
                ValueFromPipelineByPropertyName = $true,
                Position = 0,
                ParameterSetName = "Error")]
    [switch] $Error = $false,

    [Parameter( Mandatory = $True,
                ValueFromPipelineByPropertyName = $true,
                Position = 0,
                ParameterSetName = "Fatal")]
    [switch] $Fatal = $false,

    [Parameter( Mandatory = $True,
                ValueFromPipelineByPropertyName = $true,
                Position = 0,
                ParameterSetName = "Debug")]
    [switch] $Debugging = $false,

)

switch ($PSBoundParameters.Keys) {
    'Info' { $level = "INFO"
             $color = "Green" }
    'Warn' { $level = "WARNING"
             $color = "Yellow" }
    'Error' { $level = "ERROR"
              $color = "Red" }
    'Fatal' { $level = "FATAL"
              $color = "DarkRed" }
    'Debugging' { $level = "DEBUG"
                  $color = "Magenta" }
}

错误是-我明白了,但是如何转换此代码,使其符合犹太标准,并且仍然执行相同的功能?

PSSA抱怨,因为
强制
标志适用于用户-用户必须为参数集中标记为
强制
的所有参数指定参数-并且由于用户已经被要求提供参数,默认值没有意义,PowerShell永远不会使用它们

与未选择的参数集中的开关参数相对应的本地变量将默认为一个类似
$null
-的值,相当于
$false

Param(
[参数(必需=$True,
ValueFromPipelineByPropertyName=$true,
位置=0,
参数setName=“Info”)]
[切换]$Info,
[参数(必需=$True,
ValueFromPipelineByPropertyName=$true,
位置=0,
参数setName=“Warn”)]
[开关]$Warn,
[参数(必需=$True,
ValueFromPipelineByPropertyName=$true,
位置=0,
参数setName=“Error”)]
[开关]$错误,
[参数(必需=$True,
ValueFromPipelineByPropertyName=$true,
位置=0,
参数setName=“致命”)]
[切换]$Fatal,
[参数(必需=$True,
ValueFromPipelineByPropertyName=$true,
位置=0,
参数setName=“调试”)]
[开关]$调试,
)

此外,开关的默认值为$false,因此这些分配应为removed@DougMaurer如前所述,“与未选择的参数集中的开关参数相对应的局部变量将默认为类似于
$null
-的值,相当于
$false
”是的,这是有意义的。谢谢