如何管理未命名的参数

时间:2013-04-30 16:38:13

标签: parsing powershell parameters

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

设置1:

  • Param1:GroupName via pipe
  • Param2:FilePath
  • 称为:"GROUPNAME" | script.ps1 FilePath

设置2:

  • Param1:GroupName
  • Param2:FilePath
  • 称为: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的第二个参数;任何想法?

1 个答案:

答案 0 :(得分:1)

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