powershell - 多个参数集的问题
问题描述
我需要为我正在创建的函数获取三个参数。参数一必须在所有参数集中。其他两个参数有多个排列。
我尝试使用参数集并搜索了其他线程,但似乎没有一个人在讨论这种情况。
我的问题是如何创建参数集,以便只有以下可能性。
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param1 <string>
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param2 <string>
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param3
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param4
Test-ParametersNow -ParamZ <string> -ParamA <string> -Param5
Test-ParametersNow -ParamZ <string> -ParamB -Param1 <string>
Test-ParametersNow -ParamZ <string> -ParamB -Param2 <string>
Test-ParametersNow -ParamZ <string> -ParamB -Param3
Test-ParametersNow -ParamZ <string> -ParamB -Param4
Test-ParametersNow -ParamZ <string> -ParamB -Param5
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param1 <string>
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param2 <string>
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param3
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param4
Test-ParametersNow -ParamZ <string> -ParamC <string> -Param5
这是我的功能。
function Test-ParametersNow{
[CmdletBinding()]
param (
[parameter(Mandatory=$true,Position = 0)][string]$ParamZ,
[Parameter(ParameterSetName="Param1", Mandatory=$false)]
[Parameter(ParameterSetName="Param2", Mandatory=$false)]
[Parameter(ParameterSetName="Param3", Mandatory=$false)]
[Parameter(ParameterSetName="Param4", Mandatory=$false)]
[Parameter(ParameterSetName="Param5", Mandatory=$false)]
[Parameter(ParameterSetName="ParamA", Mandatory=$true,Position = 1)][ValidateNotNullOrEmpty()][string]$ParamA,
[Parameter(ParameterSetName="Param1", Mandatory=$false)]
[Parameter(ParameterSetName="Param2", Mandatory=$false)]
[Parameter(ParameterSetName="Param3", Mandatory=$false)]
[Parameter(ParameterSetName="Param4", Mandatory=$false)]
[Parameter(ParameterSetName="Param5", Mandatory=$false)]
[Parameter(ParameterSetName="ParamB", Mandatory=$true,Position = 1)][switch]$ParamB,
[Parameter(ParameterSetName="Param1", Mandatory=$false)]
[Parameter(ParameterSetName="Param2", Mandatory=$false)]
[Parameter(ParameterSetName="Param3", Mandatory=$false)]
[Parameter(ParameterSetName="Param4", Mandatory=$false)]
[Parameter(ParameterSetName="Param5", Mandatory=$false)]
[Parameter(ParameterSetName="ParamC", Mandatory=$true,Position = 1)][ValidateNotNullOrEmpty()][string]$ParamC,
[Parameter(ParameterSetName="ParamA", Mandatory=$false)]
[Parameter(ParameterSetName="ParamB", Mandatory=$false)]
[Parameter(ParameterSetName="ParamC", Mandatory=$false)]
[Parameter(ParameterSetName="Param1", Mandatory=$true,Position = 2)][ValidateNotNullOrEmpty()][string]$Param1,
[Parameter(ParameterSetName="ParamA", Mandatory=$true)]
[Parameter(ParameterSetName="ParamB", Mandatory=$true)]
[Parameter(ParameterSetName="ParamC", Mandatory=$true)]
[Parameter(ParameterSetName="Param2", Mandatory=$true,Position = 2)][ValidateNotNullOrEmpty()][string]$Param2,
[Parameter(ParameterSetName="ParamA", Mandatory=$true)]
[Parameter(ParameterSetName="ParamB", Mandatory=$true)]
[Parameter(ParameterSetName="ParamC", Mandatory=$true)]
[Parameter(ParameterSetName="Param3", Mandatory=$true,Position = 2)][switch]$Param3,
[Parameter(ParameterSetName="ParamA", Mandatory=$true)]
[Parameter(ParameterSetName="ParamB", Mandatory=$true)]
[Parameter(ParameterSetName="ParamC", Mandatory=$true)]
[Parameter(ParameterSetName="Param4", Mandatory=$true,Position = 2)][switch]$Param4,
[Parameter(ParameterSetName="ParamA", Mandatory=$true)]
[Parameter(ParameterSetName="ParamB", Mandatory=$true)]
[Parameter(ParameterSetName="ParamC", Mandatory=$true)]
[Parameter(ParameterSetName="Param5", Mandatory=$true,Position = 2)][switch]$Param5
)
}
#Show-Command Test-ParametersNow
Get-Help Test-ParametersNow
这些是我从 Get-Help Test-ParametersNow 得到的结果
NAME
Test-ParametersNow
SYNTAX
Test-ParametersNow [-ParamZ ] <string> [-ParamA] <string> -Param2 <string> -Param3 -Param4 -Param5 [-Param1 <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-Param5] [-ParamA <string>] [-ParamB] [-ParamC <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-Param4] [-ParamA <string>] [-ParamB] [-ParamC <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-Param3] [-ParamA <string>] [-ParamB] [-ParamC <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-Param2] <string> [-ParamA <string>] [-ParamB] [-ParamC <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-Param1] <string> [-ParamA <string>] [-ParamB] [-ParamC <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-ParamB] -Param2 <string> -Param3 -Param4 -Param5 [-Param1 <string>] [<CommonParameters>]
Test-ParametersNow [-ParamZ ] <string> [-ParamC] <string> -Param2 <string> -Param3 -Param4 -Param5 [-Param1 <string>] [<CommonParameters>]
ALIASES
None
REMARKS
None
解决方案
您已经定义了 8 个不同的参数集(A、B、C、1、2、3、4、5),但由于 A、B 或 C 中的每一个都有 5 个选项,因此您似乎想要 15 个:A1 到 A5 , B1 至 B5, C1 至 C5。每个参数(Z 除外)根据需要属于这些集合中的几个。像这样:
function Test-ParametersNow{
[CmdletBinding()]
param (
[parameter(Mandatory=$true,Position = 0)][string]$ParamZ,
[Parameter(ParameterSetName="ParamA1", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamA2", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamA3", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamA4", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamA5", Mandatory=$true,Position = 1)]
[ValidateNotNullOrEmpty()][string]$ParamA,
[Parameter(ParameterSetName="ParamB1", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamB2", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamB3", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamB4", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamB5", Mandatory=$true,Position = 1)]
[switch]$ParamB,
[Parameter(ParameterSetName="ParamC1", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamC2", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamC3", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamC4", Mandatory=$true,Position = 1)]
[Parameter(ParameterSetName="ParamC5", Mandatory=$true,Position = 1)]
[ValidateNotNullOrEmpty()][string]$ParamC,
[Parameter(ParameterSetName="ParamA1", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamB1", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamC1", Mandatory=$true,Position = 2)]
[ValidateNotNullOrEmpty()][string]$Param1,
[Parameter(ParameterSetName="ParamA2", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamB2", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamC2", Mandatory=$true,Position = 2)]
[ValidateNotNullOrEmpty()][string]$Param2,
[Parameter(ParameterSetName="ParamA3", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamB3", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamC3", Mandatory=$true,Position = 2)]
[switch]$Param3,
[Parameter(ParameterSetName="ParamA4", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamB4", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamC4", Mandatory=$true,Position = 2)]
[switch]$Param4,
[Parameter(ParameterSetName="ParamA5", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamB5", Mandatory=$true,Position = 2)]
[Parameter(ParameterSetName="ParamC5", Mandatory=$true,Position = 2)]
[switch]$Param5
)
}
推荐阅读
- algorithm - 拓扑排序和汉密尔顿路径?
- vba - E_ACCESSDENIED "General Access denied error" /CreateObject("Vbscript") 在 office 365 VBA 环境下被阻止
- sql - 动态日期范围的 SQL 透视图
- python - 在 iPadOS 上的 Pyto 中使用 Rubicon
- sql - Rails Brakeman:Arel 的 SQL 注入
- python - 如何在 Pandas 中对同一列下的值求和
- javascript - 带有占位符的 JavaScript 字符串标记器正则表达式
- c - 无法理解 pid->tasks[] list 的用途
- xamarin - 如何将“安装”目标添加到 Xamarin.UWP .csproj 文件?
- google-sheets - 如何在 Google 表格中按类别求和并操纵结果?