使PowerShell的ParameterSet与FileInfo和FileInfo []一起使用

时间:2015-02-10 11:21:24

标签: powershell powershell-v3.0

我有以下代码:

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参数似乎提出了问题,但我不明白为什么这是不明确的。它是第二个参数的完美匹配。

我该如何解决这个问题?

1 个答案:

答案 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