Я бы определил различные наборы параметров и различил бы по имени набора параметров.
[CmdletBinding(DefaultParameterSetName='default')]
Param(
[Parameter(ParameterSetName='default', Position=0, Mandatory=$true)]
[string[]]$Default,
[Parameter(ParameterSetName='external', Position=0, Mandatory=$true)]
[string[]]$External,
[Parameter(ParameterSetName='local', Position=0, Mandatory=$true)]
[string[]]$Local
)
# ...
switch ($PSCmdlet.ParameterSetName) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
# Usage:
# script.ps1 [-Default] 'file1', 'file2'
# script.ps1 -External 'file1', 'file2'
# script.ps1 -Local 'file1', 'file2'
Другой вариант будет использовать отдельные параметры для параметра и списка файлов, как JPBlanc предлагается, но в этом случае вы должны проверить параметр -Option
, чтобы можно было использовать только разрешенные опции:
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true)]
[ValidateSet('default', 'external', 'local')]
[string]$Option,
[Parameter(Position=1, Mandatory=$true)]
[string[]]$File
)
# ...
switch ($Option) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
# Usage:
# script.ps1 'default' 'file1', 'file2'
# script.ps1 -Option 'default' -File 'file1', 'file2'
# script.ps1 'external' 'file1', 'file2'
# script.ps1 -Option 'external' -File 'file1', 'file2'
# script.ps1 'local' 'file1', 'file2'
# script.ps1 -Option 'local' -File 'file1', 'file2'