Я думаю, это может немного объяснить. В приведенной ниже функции используются три параметра, каждый из которых имеет другое имя набора параметров.
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"
Надеюсь, что поможет