参数集的多个条件

时间:2016-11-16 18:45:06

标签: powershell

在函数中,我有2个[String]个参数,$DBServer$ServiceServer

两者都应该被允许为空白或填充,但两者之间没有任何内容。

这可以用参数吗?

或者我应该在我的PowerShell功能中包含一个检查,以确保我的条件成立?

1 个答案:

答案 0 :(得分:4)

是的,您使用Parameter Sets执行此操作。所以你有2套。其中两个参数都是强制性的,另一个参数不存在

function Ruin-Database {
[CmdletBinding(DefaultParameterSetName='Blank')]
param(
    [Parameter(
        ParameterSetName='Filled',
        Mandatory=$true
    )]
    [ValidateNotNullOrEmpty()]
    [String]
    $DBServer ,

    [Parameter(
        ParameterSetName='Filled',
        Mandatory=$true
    )]
    [ValidateNotNullOrEmpty()]
    [String]
    $ServiceServer
)

    If ($PSCmdlet.ParameterSetName -eq 'Blank') {
        Write-Verbose 'Blank' -Verbose
    } else {
        Write-Verbose 'Filled' -Verbose
    }
}

以这种方式定义函数后,请查看帮助以查看两个参数集:

Get-Help Ruin-Database

说明

如果参数指定了一个或多个参数集,那么它只会包含在这些集合中。如果它没有指定,它将包含在所有集合中。

PowerShell必须能够明确地解析该集合,如果您希望它能够工作,那么有时需要一些试验和错误。

您可以做的一件事就是在DefaultParameterSetName属性中指定CmdletBinding。但您也可以在那里指定一个您尚未在任何其他参数中使用的参数集名称。这意味着默认设置只包含不指定任何设置的参数(全部可用),即使这些设置都没有。

在函数/ cmdlet上运行帮助是查看PowerShell解释集的好方法,因为它可能会变得复杂。

您可以在单个参数上指定多个[Parameter()]属性,以在不同的集合中定义不同的特征,例如,参数在一个集合中可以是必需的,但在另一个集合中可以是可选的。它可以通过一组中的管道指定,但不能在另一组中指定。