我有一个cmdlet,带有几个ParameterSetNames。一切正常,直到我使用管道。代码(简体)如下
function Test
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True, Position=0, ValueFromPipeline=$True)]
[string]$name,
[Parameter(Mandatory = $True, ParameterSetName = "Set1")]
[Parameter(Mandatory = $True, ParameterSetName = "Set2")]
[string] $P1,
[Parameter(Mandatory = $True, ParameterSetName = "Set2")]
[string] $P2
)
Write-Output ($name + " - " + $PsCmdlet.ParameterSetName)
}
此功能可预期用于以下调用Test aaa -P1 x
,Test aaa -P1 x -P2 y
和(管道)Get-ChildItem c:\Temp | select -ExpandProperty Name | select -First 1 | Test -P1 x -P2 y
。但是,当我尝试使用“ Set1” Get-ChildItem c:\Temp | select -ExpandProperty Name | select -First 1 | Test -P1 x
管道调用它时,它失败,并显示错误Dotnet-File-Quickstart - Set2
Test : Parameter set cannot be resolved using the specified named parameters
。
我知道有关设置DefaultParameterNameSet
的信息,但是由于我的cmdlet比本示例更复杂,所以对我没有帮助。