如何从一组中至少指定一个参数?

杰克

我有一个PowerShell函数,该函数需要一个字符串和三个开关。因此,调用将如下所示:

My-Function "some string" -Switch1 -Switch2 -Switch3

但是,我想让此函数仅在提供字符串和至少一个开关的情况下运行。所以:

My-Function "some string" -Switch1 -Switch3  # Valid
My-Function "some string" -Switch2           # Valid
My-Function "some string"                    # Invalid

我知道可以通过检查是否已使用$MyInvocation对象传递了开关来做到这一点,但是有没有一种方法可以使用ParameterParameterSet属性呢?

简而言之,这就是我想要做的:

  • 每次调用函数时都必须提供字符串。
  • 每次调用该功能时,至少必须提供一个开关。
安斯加·威彻斯(Ansgar Wiechers)

我认为您无法使用参数集和必需参数来执行此操作。如果您定义了3个不同的参数集,像这样交替使用必需参数:

Param(
  [Parameter(Mandatory=$true)]
  [string]$Text,

  [Parameter(Mandatory=$true, ParameterSetName='o1')]
  [Parameter(Mandatory=$false, ParameterSetName='o2')]
  [Parameter(Mandatory=$false, ParameterSetName='o3')]
  [Switch][bool]$Switch1,

  [Parameter(Mandatory=$false, ParameterSetName='o1')]
  [Parameter(Mandatory=$true, ParameterSetName='o2')]
  [Parameter(Mandatory=$false, ParameterSetName='o3')]
  [Switch][bool]$Switch2,

  [Parameter(Mandatory=$false, ParameterSetName='o1')]
  [Parameter(Mandatory=$false, ParameterSetName='o2')]
  [Parameter(Mandatory=$true, ParameterSetName='o3')]
  [Switch][bool]$Switch3
)

如果您仅使用其中一个开关,它将起作用:

My-Function "foo" -Switch2

但是如果您使用多个开关,则失败:

PS C:\> .\test.ps1 "foo" -Switch1 -Switch2
C:\test.ps1 : Parameter set cannot be resolved using the specified named
parameters.
At line:1 char:1
+ .\test.ps1 "foo" -Switch1 -Switch2
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [test.ps1], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,test.ps1

我会改用set-validated强制性参数:

Param(
  [Parameter(Mandatory=$true)]
  [string]$Text,

  [Parameter(Mandatory=$true)]
  [ValidateSet('Switch1', 'Switch2', 'Switch3', ignorecase=$true)]
  [string[]]$Options
)

那将允许您像这样调用函数:

My-Function "foo" -Options Switch1
My-Function "foo" -Options Switch2,Switch3

或者,您可以将所有三个开关设为可选,并在函数中对其进行验证:

Param(
  [Parameter(Mandatory=$true)]
  [string]$Text,

  [Parameter(Mandatory=$false)]
  [Switch][bool]$Switch1,

  [Parameter(Mandatory=$false)]
  [Switch][bool]$Switch2,

  [Parameter(Mandatory=$false)]
  [Switch][bool]$Switch3
)

if (-not ($Switch1.IsPresent -or $Switch2.IsPresent -or $Switch3.IsPresent)) {
  throw 'Missing switch'
}

动态参数可能是另一种选择,但是我不能肯定地说。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从一组布尔值中返回一个布尔值?

来自分类Dev

创建一个从一组文件中提取用户指定列的函数

来自分类Dev

如何在angular-ui-router中定义一个regex参数以仅从一组定义的字符串中进行选择

来自分类Dev

确定至少已重新压缩/还原了一组图像中的哪一个

来自分类Dev

仅在选择特定的一组单选按钮中的至少一个时显示图像

来自分类Dev

选择至少填充了一组选定字段中的一个的记录

来自分类Dev

从一组中随机删除一列,不包括一个

来自分类Dev

如何在python中检查指定功能的至少一个默认参数

来自分类Dev

从一组1个元素中取出一个项目

来自分类Dev

如何从一组列表中向下滑动一个列表并单击关闭其他列表?

来自分类Dev

如何让我的机器人从一组图像中随机选择一个图像

来自分类Dev

从一组哈希中的一个哈希中查找所有密钥

来自分类Dev

如何从一组数字(而不是范围)中生成一个随机数

来自分类Dev

如何从一个点生成一组圆点?

来自分类Dev

从一组字符串中重新匹配一个,结果作为变量

来自分类Dev

TSQL-从一组行中获取第一个匹配项

来自分类Dev

R:从一组布尔值中返回一个TRUE / FALSE

来自分类Dev

从一组标签中删除一个<video>标签

来自分类Dev

无法从一组字符串中取出一个数字-C

来自分类Dev

从一组记录中获取最后一个日期

来自分类Dev

从一组对象中只抓取一个对象

来自分类Dev

Ansible:从一组主机中获取一个变量

来自分类Dev

从一组对象中获取多个属性并形成一个新属性:Javascript

来自分类Dev

如何更改由空格分隔的一组参数,使其成为Discord.js中的一个参数?

来自分类Dev

在Python中的一组可选参数中声明一个位置参数

来自分类Dev

如何从指定范围内生成一组随机整数,不包括matlab中的一个整数

来自分类Dev

如何测试一个值是否与一组值中的一个匹配?

来自分类Dev

如何在Scala中从一组String中产生一组Char

来自分类Dev

如何创建一个从一组设备返回最后十个文档的视图?

Related 相关文章

  1. 1

    如何从一组布尔值中返回一个布尔值?

  2. 2

    创建一个从一组文件中提取用户指定列的函数

  3. 3

    如何在angular-ui-router中定义一个regex参数以仅从一组定义的字符串中进行选择

  4. 4

    确定至少已重新压缩/还原了一组图像中的哪一个

  5. 5

    仅在选择特定的一组单选按钮中的至少一个时显示图像

  6. 6

    选择至少填充了一组选定字段中的一个的记录

  7. 7

    从一组中随机删除一列,不包括一个

  8. 8

    如何在python中检查指定功能的至少一个默认参数

  9. 9

    从一组1个元素中取出一个项目

  10. 10

    如何从一组列表中向下滑动一个列表并单击关闭其他列表?

  11. 11

    如何让我的机器人从一组图像中随机选择一个图像

  12. 12

    从一组哈希中的一个哈希中查找所有密钥

  13. 13

    如何从一组数字(而不是范围)中生成一个随机数

  14. 14

    如何从一个点生成一组圆点?

  15. 15

    从一组字符串中重新匹配一个,结果作为变量

  16. 16

    TSQL-从一组行中获取第一个匹配项

  17. 17

    R:从一组布尔值中返回一个TRUE / FALSE

  18. 18

    从一组标签中删除一个<video>标签

  19. 19

    无法从一组字符串中取出一个数字-C

  20. 20

    从一组记录中获取最后一个日期

  21. 21

    从一组对象中只抓取一个对象

  22. 22

    Ansible:从一组主机中获取一个变量

  23. 23

    从一组对象中获取多个属性并形成一个新属性:Javascript

  24. 24

    如何更改由空格分隔的一组参数,使其成为Discord.js中的一个参数?

  25. 25

    在Python中的一组可选参数中声明一个位置参数

  26. 26

    如何从指定范围内生成一组随机整数,不包括matlab中的一个整数

  27. 27

    如何测试一个值是否与一组值中的一个匹配?

  28. 28

    如何在Scala中从一组String中产生一组Char

  29. 29

    如何创建一个从一组设备返回最后十个文档的视图?

热门标签

归档