我正在处理一个包含多个参数集的函数,其中一些是必需的,一些是可选的。
这只是一个例子,但想象一下以下情况:
从AD组添加或删除用户或计算机的功能(出于某种原因,您需要区分用户和计算机)。
请记住这只是一个例子。在这种情况下,使用[string]
添加/删除单个ValidateSet()
参数要容易得多,但这不是重点。
所以你有4个参数集:
Param
(
[Parameter(ParameterSetName = 'Add', Mandatory = $true)][switch] $Add,
[Parameter(ParameterSetName = 'Remove', Mandatory = $true)][switch] $Remove,
[Parameter(ParameterSetName = 'User', Mandatory = $true)][switch] $User,
[Parameter(ParameterSetName = 'Computer', Mandatory = $true)][switch] $Computer
)
现在的问题是你只能使用四个参数中的一个,而不是(添加或删除)和(用户或计算机)
我知道每个参数可以使用多个参数集,但我看不到强制它有两个参数集的方法,这些参数集总是强制性的。实际上,您必须始终指定“添加”或“删除”以及“用户”或“计算机”。
如何做到这一点?
答案 0 :(得分:3)
您需要为这些不同的组合定义多个参数集。 试试这个:
Function TestParamSet {
[CmdletBinding()]
Param
(
[Parameter(ParameterSetName = 'AddUser', Mandatory = $true)]
[Parameter(ParameterSetName = 'AddComputer', Mandatory = $true)]
[switch] $Add,
[Parameter(ParameterSetName = 'RemoveUser', Mandatory = $true)]
[Parameter(ParameterSetName = 'RemoveComputer', Mandatory = $true)]
[switch] $Remove,
[Parameter(ParameterSetName = 'AddUser', Mandatory = $true)]
[Parameter(ParameterSetName = 'RemoveUser', Mandatory = $true)]
[switch] $User,
[Parameter(ParameterSetName = 'AddComputer', Mandatory = $true)]
[Parameter(ParameterSetName = 'RemoveComputer', Mandatory = $true)]
[switch] $Computer
)
Process {
#Do Nothing
}
}
而且,这是您在获得有关此功能的帮助时所看到的内容:
PS C:\> Get-Help TestParamSet
NAME
TestParamSet
SYNTAX
TestParamSet -Add -Computer [<CommonParameters>]
TestParamSet -Add -User [<CommonParameters>]
TestParamSet -Remove -Computer [<CommonParameters>]
TestParamSet -Remove -User [<CommonParameters>]
ALIASES
None
REMARKS
None