Групповой параметр (установить?), Требующий один из параметров - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь настроить параметры, где требуется один из трех наборов параметров, и включает целое число, за которым следует двоеточие;

-year:n  
-month:n  
-day:n

Не могу полностью обернуть голову вокруг наборов параметров через MicrosoftДокументы и нужна помощь в настройке, пожалуйста.

В конце параметр будет использоваться для параметра MinAge Robocopy, где, если используется -month:2, я вычеркну 2, умножив на30.4167 (средний день в месяце) и вставьте /MinAge:60.8334 в качестве параметра Robocopy. У меня есть последняя часть, но не часть параметров.

1 Ответ

3 голосов
/ 08 ноября 2019

Я думаю, это может немного объяснить. В приведенной ниже функции используются три параметра, каждый из которых имеет другое имя набора параметров.

function Get-MinAge {
    [CmdletBinding(DefaultParameterSetName = 'ByDays')]
    param (
        [Parameter(Mandatory = $true, ParameterSetName = 'ByYears', Position = 0)]
        [int]$Years,
        [Parameter(Mandatory = $true, ParameterSetName = 'ByMonths', Position = 0)]
        [int]$Months,
        [Parameter(Mandatory = $true, ParameterSetName = 'ByDays', Position = 0)]
        [int]$Days
    )

    switch ($PSCmdlet.ParameterSetName) {
        'ByYears'  { $minage = $Years * 365.2422 ; break}  # average year length
        'ByMonths' { $minage = $Months * 30.4167 ; break } # average month length
        'ByDays'   { $minage = $Days }
    }
    # return the parameter for robocopy
    # wrapping inside quotes makes sure your Windows locale does not change the decimal point
    '/MinAge:{0}' -f "$minage"
}

Использование этого в редакторе ISE позволит использовать только один из трех параметров. Функция также имеет DefaultParameterSetName, что означает, что если вы не укажете имя параметра, будет использоваться набор по умолчанию (в данном случае набор «ByDays»).

Используйте его так:

Get-MinAge -Years 2   --> "/MinAge:730.4844"
Get-MinAge -Months 2  --> "/MinAge:60.8334"
Get-MinAge -Days 2    --> "/MinAge:2"
Get-MinAge 2          --> "/MinAge:2"

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...