假设我具有以下param cmdlet
[CmdletBinding(DefaultParameterSetName='View')]
Param(
[Parameter(ParameterSetName='ChangeOne', Mandatory=$true)]
[Switch]$ChangeOne,
[Parameter(ParameterSetName='ChangeAll', Mandatory=$true)]
[Switch]$ChangeAll,
[Parameter(ParameterSetName='View', Mandatory=$false)]
[Switch]$View
)
假设我需要一个foreach
和ChangeAll
的一个View
,而不是ChangeOne
的一个。在这种情况下,如何嵌套switch语句?
我正在寻找的伪代码...这是我怎么做的?
switch ($PSCmdlet.ParameterSetName)
{
'ChangeOne'
{...}
foreach ($server in $Servers)
{
switch ($PSCmdlet.ParameterSetName)
{
'ChangeAll'
{...}
'View'
{...}
}
}
}
答案 0 :(得分:1)
您可以使用IF语句和-in
运算符来完成此操作。
[CmdletBinding(DefaultParameterSetName='View')]
Param(
[Parameter(ParameterSetName='ChangeOne', Mandatory=$true)]
[Switch]$ChangeOne,
[Parameter(ParameterSetName='ChangeAll', Mandatory=$true)]
[Switch]$ChangeAll,
[Parameter(ParameterSetName='View', Mandatory=$false)]
[Switch]$View
)
if ($PSCmdlet.ParameterSetName -in 'View','ChangeAll') {
foreach () {
}
}
您可以使用-notin
运算符采取类似的方法。使用-notin
,如果您以后选择添加更多参数集,它们将自动评估为true。
if ($PSCmdlet.ParameterSetName -notin 'ChangeOne') {
foreach () {
}
}
另一种方法是继续使用Switch
并设置默认条件。
[CmdletBinding(DefaultParameterSetName='View')]
Param(
[Parameter(ParameterSetName='ChangeOne', Mandatory=$true)]
[Switch]$ChangeOne,
[Parameter(ParameterSetName='ChangeAll', Mandatory=$true)]
[Switch]$ChangeAll,
[Parameter(ParameterSetName='View', Mandatory=$false)]
[Switch]$View
)
switch ($PSCmdlet.ParameterSetName) {
'ChangeOne' { }
Default {
foreach () {}
}
}
答案 1 :(得分:1)
这是一种非常简单的方法。检查是否指定了$ChangeAll
或$View
。如果不是,则为$ChangeOne
if($ChangeAll -or $View){
foreach ...
} else {
# ChangeOne will go here
...
}