đọc của tôi về câu hỏi ban đầu là hơi khác nhau của CB. Từ
Get-Foo [-foo1] <foo1Arg> [-foo2 <foo2Arg> [-bar <barArg>]]
Đối số đầu tiên $ foo1 luôn bắt buộc, trong khi thanh chỉ định $ foo2 cũng phải được chỉ định.
Vì vậy, mã hóa của tôi về nó sẽ là đặt $ foo1 trong cả hai bộ tham số.
function Get-Foo
{
[CmdletBinding(DefaultParameterSetName="set1")]
param (
[Parameter(ParameterSetName="set1", Mandatory=$true, Position=0)]
[Parameter(ParameterSetName="set2", Mandatory=$true, Position=0) ]
[string]$foo1,
[Parameter(ParameterSetName="set2", Mandatory=$true)]
[string]$foo2,
[Parameter(ParameterSetName="set2", Mandatory=$false)]
[string]$bar
)
switch ($PSCmdlet.ParameterSetName)
{
"set1"
{
$Output= "Foo is $foo1"
}
"set2"
{
if ($bar) { $Output= "Foo is $foo1, Foo2 is $foo2. Bar is $Bar" }
else { $Output= "Foo is $foo1, Foo2 is $foo2"}
}
}
Write-Host $Output
}
Get-Foo -foo1 "Hello"
Get-Foo "Hello with no argument switch"
Get-Foo "Hello" -foo2 "There is no bar here"
Get-Foo "Hello" -foo2 "There" -bar "Three"
Write-Host "This Stops for input as foo2 is not specified"
Get-Foo -foo1 "Hello" -bar "No foo2"
Sau đó, bạn sẽ nhận được kết quả sau khi bạn chạy phần trên.
Foo is Hello
Foo is Hello with no argument switch
Foo is Hello, Foo2 is There is no bar here
Foo is Hello, Foo2 is There. Bar is Three
This Stops for input as foo2 is not specified
cmdlet Get-Foo at command pipeline position 1
Supply values for the following parameters:
foo2: Typedfoo2
Foo is Hello, Foo2 is Typedfoo2. Bar is No foo2
Nguồn
2013-04-17 11:04:11
Xem câu hỏi này: http://stackoverflow.com/questions/10748978/conditional-powershell-parameters/10749238#10749238 –