mandatory
将使这两个参数成为必需。我只需要确保 path
或 fileList
始终存在。
我一直在做以下事情,但并不理想:
function foo{
Param(
[string[]]$path
[string[]]$fileList
)
if (($null -eq $path) -and ($fileList -eq "")){Write-Error -Message "Paths or FilieList must be used" -ErrorAction Stop}
}
win11/pwsh 7.4
尝试以下操作:
function foo {
[CmdletBinding(DefaultParameterSetName = 'PathAndFileList')]
Param(
[Parameter(ParameterSetName='PathOnly', Mandatory)]
[Parameter(ParameterSetName='PathAndFileList', Mandatory)]
[string[]]$Path,
[Parameter(ParameterSetName='FileListOnly', Mandatory)]
[Parameter(ParameterSetName='PathAndFileList', Mandatory)]
[string[]]$FileList
)
# Diagnostic output: Show which parameters were bound.
$PSBoundParameters
}
关键是使用参数集:
每个参数特定设置一个,适用于在调用时仅绑定两个参数中的仅一个(
PathOnly
、FileListOnly
)。
当绑定
两个参数时共享一个 (
PathAndFileList
)。
通过在其所属的所有参数集中将两个参数标记为
Mandatory
,无参数调用会触发交互式提示,用于为强制参数提供值,或者 - 在启动的会话中通过 -NonInteractive
参数 - 触发 错误。
通过
DefaultParameterSetName
属性,您可以选择
default 参数集,在交互式执行中,它反过来确定在无参数调用中提示哪些参数(或者一般来说,在未绑定目标集中的 all 强制参数的调用中)。
警告:如果选择
PathAndFileList
作为默认参数集,则在无参数交互式调用中会提示输入 both -Path
和 -FileList
,并且 不能为空(默认情况下,数组- 类型参数不接受空数组),即您必须为both提供至少一个值才能进行调用。[AllowEmptyCollection()]
属性,但问题是,如果您将其添加到两个参数,则如果您不输入任何内容/将 @()
传递给两个参数,则会再次启用 effectively无参数调用。
也就是说,交互式提示的用户体验通常很差,并且在其支持的参数类型方面受到限制。
-NonInteractive
一样),这将使此问题变得毫无意义。