Powershell 如何将交换机嵌套在外部和内部?
假设我有以下param cmdletPowershell 如何将交换机嵌套在外部和内部?,powershell,Powershell,假设我有以下param cmdlet [CmdletBinding(DefaultParameterSetName='View')] Param( [Parameter(ParameterSetName='ChangeOne', Mandatory=$true)] [Switch]$ChangeOne, [Parameter(ParameterSetName='ChangeAll', Mandatory=$true)] [Switch]$ChangeAll,
[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
)
假设我需要一个用于ChangeAll
和视图的foreach
,但不用于ChangeOne
。在这种情况下,如何嵌套switch语句
我在寻找的伪代码…我就是这样做的吗
switch ($PSCmdlet.ParameterSetName)
{
'ChangeOne'
{...}
foreach ($server in $Servers)
{
switch ($PSCmdlet.ParameterSetName)
{
'ChangeAll'
{...}
'View'
{...}
}
}
}
您可以使用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 () {
}
}
另一种方法是继续使用开关
并设置默认条件
[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 () {}
}
}
您可以使用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 () {
}
}
另一种方法是继续使用开关
并设置默认条件
[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 () {}
}
}
这是一个非常简单的方法。检查是否指定了$ChangeAll
或$View
。如果不是,则这将是$ChangeOne
if($ChangeAll -or $View){
foreach ...
} else {
# ChangeOne will go here
...
}
这是一个非常简单的方法。检查是否指定了$ChangeAll
或$View
。如果不是,则这将是$ChangeOne
if($ChangeAll -or $View){
foreach ...
} else {
# ChangeOne will go here
...
}
因此,在foreach内部,我也可以保留以下内容:switch($PSCmdlet.ParameterSetName){'ChangeAll'{…}'视图{…}}Yes。你可以。这里的总体目标是什么?总体目标是无论用户通过什么开关,它都将执行代码的特定部分。您是否只是试图在多个位置不重复相同的foreach语句?如果是这样,您可能需要稍微更改switch语句或使用If语句。换句话说,即使ChangeAll和View开关也有不同的代码部分,但它们都在foreach($Servers中的server)中,另一方面,ChnageOne不需要在foreach()中因为我要将服务器作为用户输入单独传递给它,所以在foreach中,我也可以保留以下内容:switch($PSCmdlet.ParameterSetName){'ChangeAll'{…}'View'{…}Yes。你可以。这里的总体目标是什么?总体目标是无论用户通过什么开关,它都将执行代码的特定部分。您是否只是试图在多个位置不重复相同的foreach语句?如果是这样,您可能需要稍微更改switch语句或使用If语句。换句话说,即使ChangeAll和View开关也有不同的代码部分,但它们都在foreach($Servers中的server)中,另一方面,ChnageOne不需要在foreach()中因为我将一个服务器作为用户输入单独传递给它,所以在foreach内部,我也可以保留以下内容:switch($PSCmdlet.ParameterSetName){'ChangeAll'{…}'View'{…}}@Cataster当然可以,但我看不出有多少理由为单个条件使用switch
。您可以在foreach
内部使用singleif
。因此,在foreach内部,我也可以保留以下内容:switch($PSCmdlet.ParameterSetName){'ChangeAll'{…}'View'{…}@Cataster当然可以,但我看不出有多少理由在单个条件下使用switch
。您可以在foreach
的内部使用singleif
。