如何处理可以通过管道连接的未命名参数



我希望我的Powershell脚本能够处理如下所示的两个参数集。

设置1:

  • Param1: GroupName via pipe
  • Param2: FilePath
  • call like: "GROUPNAME" | script.ps1 FilePath

组2:

  • Param1: GroupName
  • Param2: FilePath
  • call like: script.ps1 GroupName FilePath

在这两种情况下,两个参数都是强制性的。

我已经尝试了我能想到的所有方法,我想我最接近的方法是:

[CmdletBinding(DefaultParameterSetName="Pipe")]
param (
    [Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$false,HelpMessage="AD Group Name",ParameterSetName="Param")]
    [Parameter(Mandatory=$true,ValueFromPipeline=$true,HelpMessage="AD Group Name",ParameterSetName="Pipe")]
    [ValidateNotNullOrEmpty()]
    [String]$GroupName,
    [Parameter(Mandatory=$true,Position=1,ValueFromPipeline=$false,HelpMessage="Path to CSV",ParameterSetName="Param")]
    [Parameter(Mandatory=$true,Position=0,ValueFromPipeline=$false,HelpMessage="Path to CSV",ParameterSetName="Pipe")]
    [ValidateNotNullOrEmpty()]
    [String]$FilePath
)

这行不通,因为它总是期望第二个参数位于位置1;什么好主意吗?

不需要两个参数集。ValueFromPipeline=$true使函数接受来自管道的输入,但是不要求来自管道——它也可以被指定为参数。

最新更新