【发布时间】:2019-05-29 09:10:29
【问题描述】:
我想在自定义 powershell 模块中编写一个可以定义一些开关的函数。
该函数应该在没有开关的情况下调用,或者只有一个开关。不允许多个开关。
例如:
Get-Foo -Value "text" # Should return "text"
Get-Foo -Value "2019-01-01T00:00:00Z" -AsDate # Should return the value as date
Get-Foo -Value "42" -AsInteger # Should return 42 as integer
Get-Foo -Value "xxx" -AsDate -AsInteger # Should fail
为了支持这些情况,我在玩参数集:
function Get-Foo{
param(
[Parameter(Mandatory=$true)]
[string]$Value,
[Parameter(ParameterSetName='AsDate')]
[Switch]$AsDate,
[Parameter(ParameterSetName='AsInteger')]
[Switch]$AsInteger
)
switch ($PsCmdlet.ParameterSetName) {
"AsDate" {
[datetime]::Parse($Value)
}
"AsInteger" {
[int]::Parse($Value)
}
"__AllParameterSets" {
$Value
}
}
}
但是,这并没有按预期工作。通过两个开关之一工作。通过这两个开关失败(但这是有意的)。
完全不传递开关失败,因为它无法解析参数集。
如何解决这个问题?
【问题讨论】:
-
@RohinSidharth,不是真的。您建议的答案仅指定如何使用参数集,而不是如何解决“无开关” case.thx 反正
标签: powershell