function test{
[cmdletBinding()]
param(
[Parameter(Position=0,Mandatory=$true)] [string]$Age,
[Parameter(Position=1,Mandatory=$true)] [string]$Sex,
[Parameter(Position=2,Mandatory=$true)] [string]$Location,
[Parameter(Mandatory=$false)][ValidateSet("True","False")][string]$Favorite
[Parameter(Mandatory=$false)[string]$FavoriteCar
)
}
让我们说前三个参数是必需的,但不是第四个和第五个。对于$ Favorite,我只能传递true或false,但默认情况下它是$ false但是如果我传递true,我希望$ favoriteCar设置为$ true。
答案 0 :(得分:1)
function test{
[cmdletBinding(DefaultParameterSetName = 'all')]
param(
[Parameter(Position=0,Mandatory=$true)] [string]$Age,
[Parameter(Position=1,Mandatory=$true)] [string]$Sex,
[Parameter(Position=2,Mandatory=$true)] [string]$Location,
[Parameter(ParameterSetName='Extra',Mandatory=$true)][bool]$Favorite,
[Parameter(ParameterSetName='Extra',Mandatory=$true)][string]$FavoriteCar
)
if ($PSCmdlet.ParameterSetName -eq 'extra')
{
if($Favorite)
{
Write-Host ('age:{0}, sex: {1}, location: {2}, favcar: {3}' -f $age ,$sex, $Location,$FavoriteCar)
}
else
{
'nothing'
}
}
else
{
Write-Host ('age:{0}, sex: {1}, location: {2}' -f $age ,$sex, $Location)
}
}
您不需要执行[ValidateSet("True","False")][switch]
因为[switch]
始终评估为布尔值。true
如果存在,则为false
如果未指定默认参数集名称,PS将默认为在参数上找到的ParameterSetName,在这种情况下为extra
,并将提示您输入必需的favcar参数。当然没有指定all
个参数,但是我们设置了它,所以默认情况下PS dosent尝试运行extra
ParameterSet。
修改强>
在下面的命令中,因为未使用参数$favorite\$favoritecar
PS将不会提示您输入任何值。
test -Age 10 -Sex female -Location Moon
输出:
age:10, sex: female, location: Moon
以下将强制PS使用参数集'额外'并提示您输入参数$favoritecar
的值,因为它在参数集中是必需的'额外'。
test -Age 10 -Sex female -Location Moon -favorite $true
下面仍会提示您输入$favoritecar
参数,因为它是强制性的,但由于代码中的if
条件,不会处理任何内容。
test -Age 10 -Sex female -Location Moon -Favorite $false -FavoriteCar Ferrari
输出:
nothing