Как вложить гнездо снаружи и внутри? - PullRequest
0 голосов
/ 14 мая 2019

предположим, у меня есть следующий командлет param

[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'
         {...}
     }
 }
}

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Это довольно простой подход. Проверьте, указаны ли $ChangeAll или $View. Если нет, то это будет $ChangeOne

if($ChangeAll -or $View){
   foreach ...
} else { 
   # ChangeOne will go here
   ...
}
1 голос
/ 14 мая 2019

Это можно сделать с помощью оператора 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 () {}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...