我正在编写一个路径操纵器函数,该函数带有两个参数,其中两个参数可以是字符串的String
或Array
:
function wranglePath(
[Parameter(Position = 0, Mandatory = $true, ParameterSetName = "arr-arr")]
[Parameter(Position = 0, Mandatory = $true, ParameterSetName = "arr-joined")]
[String[]]$AugendArray,
[Parameter(Position = 1, Mandatory = $true, ParameterSetName = "arr-arr")]
[Parameter(Position = 1, Mandatory = $true, ParameterSetName = "joined-arr")]
[String[]]$AddendArray,
[Parameter(Position = 0, Mandatory = $true, ParameterSetName = "joined-joined")]
[Parameter(Position = 0, Mandatory = $true, ParameterSetName = "joined-arr")]
[String]$AugendJoined,
[Parameter(Position = 1, Mandatory = $true, ParameterSetName = "joined-joined")]
[Parameter(Position = 1, Mandatory = $true, ParameterSetName = "arr-joined")]
[String]$AddendJoined
) {
switch ($PsCmdlet.ParameterSetName) {
"arr-arr" {
Write-Host "arr-arr"
}
"arr-joined" {
Write-Host "arr-joined"
}
"joined-arr" {
Write-Host "joined-arr"
}
"joined-joined" {
Write-Host "joined-joined"
}
}
}
我希望PowerShell通过传递的参数类型来确定正确的ParameterSetName
,我不想获取PSObject
并在函数中找出答案。
如果我使用命名参数调用函数,则其行为将符合预期。但是,当我在不命名参数的情况下传递两个字符串时,它失败并出现ambiguousparameterset
错误。
我正在编写的函数返回Array
的{{1}}表示形式的文件路径,其中每个元素都已被清理和验证。这两个参数分别是String
和Augend
,每个参数要么是一个单独的Addend
,由包含String
的路径元素组成,要么是Path Delimiter Character
字符串。如果参数是Array
,则不允许任何元素包含Array
。如果参数是单个Path Delimiter Character
,则函数会拆分String,并将其转换为String
字符串。这是一个多平台功能。
如何让PowerShell执行此操作?