我认为如果这是可能的,它可能会使用参数集,所以我尝试了以下内容:
$ awk -F\' '{OFS=FS; for (i=1;i<=NF;i++) gsub(/ /,(i%2?"|":"_"),$i)}1' file
active=1|'oldest_active'=0s|disabled=0|'function_call'=0
执行此操作以创建函数会导致错误Function New-TestMultipleDefaultValues {
[CmdletBinding(DefaultParameterSetName="Default1")]
param (
[Parameter(Mandatory,ParameterSetName="Default1")]$SomeOtherThingThatIfSpecifiedShouldResultInTest1HavingValue1,
[Parameter(ParameterSetName="Default1")]$Test1 = "Value1",
[Parameter(ParameterSetName="Default2")]$Test1 = "Value2"
)
$PSBoundParameters
}
,因此看起来这种方式看起来不是一种选择。
此时我唯一能想到的就是做这样的事情:
Duplicate parameter $test1 in parameter list.
哪个有效,但看起来很难看:
Function New-TestMultipleDefaultValues {
param (
$SomeOtherThingThatIfSpecifiedShouldResultInTest1HavingValue1,
$Test1
)
if (-not $Test1 -and $SomeOtherThingThatIfSpecifiedShouldResultInTest1HavingValue1) {
$Test1 = "Value1"
} elseif (-not $Test1 -and -not $SomeOtherThingThatIfSpecifiedShouldResultInTest1HavingValue1) {
$Test1 = "Value2"
}
$Test1
}
有没有更好的方法来实现这个目标?
答案 0 :(得分:1)
以下似乎有效:
Function New-TestMultipleDefaultValues {
[CmdletBinding(DefaultParameterSetName="Default1")]
param (
[Parameter(ParameterSetName="Default1")] $SomeOtherThing,
[Parameter(ParameterSetName="Default1")] $Test1 =
$(@( 'Value2', 'Value1' )[$PSBoundParameters.ContainsKey('SomeOtherThing')])
)
# If -Test1 <value> is explicitly specified, that value is bound to $Test1.
# By default, $Test1 contains 'Value1' if -SomeOtherThing <val> was specified,
# and 'Value2' otherwise.
$Test1
}
可以使用子表达式运算符$(...)
来定义参数默认值。
显然,在绑定了显式指定的参数之后,会对这些表达式进行求值,这允许表达式检查已绑定的参数。
@( 'Value2', 'Value1' )[$PSBoundParameters.ContainsKey('SomeOtherThing')]
只是一个更简洁的重新制定
if ($PSBoundParameters.ContainsKey('SomeOtherThing')) { 'Value1' } else { 'Value2' }
在数组下标(整数)上下文中使用时,利用[bool]
值映射到0
($false
)和1
($true
)。
答案 1 :(得分:0)
您可能需要查看动态参数。你声明了一个名为dynamicparams {}的部分,你可以在里面创建参数。