我希望我的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
使函数接受来自管道的输入,但是不要求来自管道——它也可以被指定为参数。