如何在powershell中设置条件强制参数?

35g0bw71  于 2023-02-08  发布在  Shell
关注(0)|答案(1)|浏览(133)

例:假设我有

[Parameter(Mandatory=$true)]
[ValidateSet("UP","DOWN")]
$Direction,

[Parameter(Mandatory=$true)]
[string]$AssertBytes,

[ValidateScript({
    if($_ -notmatch "(\.json)"){
        throw "The file specified in the path argument must be of type json"
    }
    return $true 
})]
$JsonMappingsFilePath,

如果我有$AssertBytes等于true,那么我希望$JsonMappingsFilePath是强制的。否则我希望它被忽略。
这似乎行不通:

[Parameter(Mandatory=$true)]
[ValidateSet("UP","DOWN")]
$Direction,

[Parameter(ParameterSetName='AssertBytes', Mandatory=$False)]
[switch]$AssertBytes,

[Parameter(ParameterSetName='AssertBytes', Mandatory=$False)]
[ValidateScript({
    if($_ -notmatch "(\.json)"){
        throw "The file specified in the path argument must be of type json"
    }
    return $true 
})]
$JsonMappingsFilePath,
bq3bfh9z

bq3bfh9z1#

使AssertBytes成为 * 两个不同参数集 * 的成员--一个是强制的,另一个不是--然后使用CmdletBinding属性将参数是可选的那一个指定为默认参数集:

[CmdletBinding(DefaultParameterSetName = 'NoAssertBytes')]
param(
    [Parameter(Mandatory=$true)]
    [ValidateSet("UP","DOWN")]
    $Direction,

    [Parameter(ParameterSetName='AssertBytes', Mandatory=$False)]
    [switch]$AssertBytes,

    [Parameter(ParameterSetName='AssertBytes', Mandatory=$True)]
    [Parameter(ParameterSetName='NoAssertBytes', Mandatory=$False)]
    [ValidateScript({
        if($_ -notmatch "(\.json)"){
            throw "The file specified in the path argument must be of type json"
        }
        return $true 
    })]
    $JsonMappingsFilePath
)

相关问题