powershell - Powershell:如何在参数中正确实现模式切换?
问题描述
我的函数中有一个代码对我来说效果很好,受到另一个 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" }
}
错误是https://github.com/PowerShell/PSScriptAnalyzer/blob/master/RuleDocumentation/AvoidDefaultValueForMandatoryParameter.md - 我明白了,但是如何转换此代码以使其符合犹太教规并且仍然执行相同的功能?
解决方案
PSSA 抱怨是因为该Mandatory
标志适用于用户——用户必须为参数集中标记的所有参数指定参数Mandatory
——并且由于用户已经被要求提供参数,因此默认值没有意义,PowerShell 永远不会使用它们。
与未选择的参数集中的开关参数对应的局部变量将默认为$null
-like 值,相当于$false
无论如何:
Param(
[Parameter( Mandatory = $True,
ValueFromPipelineByPropertyName = $true,
Position = 0,
ParameterSetName = "Info")]
[switch] $Info,
[Parameter( Mandatory = $True,
ValueFromPipelineByPropertyName = $true,
Position = 0,
ParameterSetName = "Warn")]
[switch] $Warn,
[Parameter( Mandatory = $True,
ValueFromPipelineByPropertyName = $true,
Position = 0,
ParameterSetName = "Error")]
[switch] $Error,
[Parameter( Mandatory = $True,
ValueFromPipelineByPropertyName = $true,
Position = 0,
ParameterSetName = "Fatal")]
[switch] $Fatal,
[Parameter( Mandatory = $True,
ValueFromPipelineByPropertyName = $true,
Position = 0,
ParameterSetName = "Debug")]
[switch] $Debugging,
)
推荐阅读
- javascript - 猫头鹰轮播未在 Elementor 实时预览中显示
- git - SSMS 18 和源代码控制集成,即。TFS
- angular - 为什么我的 ngrx 操作会导致无限循环?
- python - 创建具有不同类型的嵌套列表的快速方法:numpy、pandas 或列表连接?
- sql - 如何拆分字符串并将每个值作为记录插入数据库中?
- python - 使用python将行转换为列表
- java - 使用 Easymock 进行案例测试
- powershell - Powershell 的 -split 行为因方法参数而异
- c++ - 从 'TreeNode' 到 'TreeNode* ' 没有可行的转换
- solr - 当查询词混乱时,Solr 搜索结果会发生变化