我有以下代码:
Function SCCE {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$True, ValueFromPipeLine=$True,ParameterSetName="Files")]
[System.IO.FileInfo[]]$sourceFiles,
[Parameter(Position=0, Mandatory=$True, ValueFromPipeLine=$True, ParameterSetName='File')]
[System.IO.FileInfo]$sourceFile
)
PROCESS {
Write-Host $PSCmdlet.ParameterSetName
}
}
我希望针对指定的类型进行此项工作,据我所知,即使类型完全正确,也不会这样做。
例如:
$file = (ls)[0]
$file.getType() #FileInfo
SCCE $file
SCCE:无法使用指定的named解析参数集 参数。在行:1 char:1
+ SCCE $ file
+ ~~~~~~~~~~
+ CategoryInfo:InvalidArgument:(:) [SCCE],ParentContainsErrorRecordException
+ FullyQualifiedErrorId:AmbiguousParameterSet,SCCE
注释掉sourceFiles参数似乎提出了问题,但我不明白为什么这是不明确的。它是第二个参数的完美匹配。
我该如何解决这个问题?
答案 0 :(得分:2)
我不确定为什么你将它们都设置为Mandatory=$True
,或者为什么你甚至为每种类型都设置了一套。只使用一个数组,如果只有一个文件传递它,那么它只是一个长度为1的数组。
Function SCCE {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$True,ValueFromPipeLine=$True,ParameterSetName="Files")]
[System.IO.FileInfo[]]$sourceFiles
)
PROCESS {
Write-Host $PSCmdlet.ParameterSetName
}
}
然后你可以这样打电话:
> SCCE (gci . -file)
Files
> SCCE (gci . -file)[0]
Files