gpt4 book ai didi

powershell - 制作 PowerShell 所需的众多参数中的至少一个

转载 作者:行者123 更新时间:2023-12-05 01:24:10 29 4
gpt4 key购买 nike

在 PowerShell 中,我想编写一个函数,它接受不同的选项作为参数。没关系,如果它接收多个参数,但它必须接收至少一个参数。我想通过参数定义而不是之后的代码来强制执行它。我可以使用以下代码让它工作:

function Set-Option {

Param(
[Parameter(Mandatory, ParameterSetName="AtLeastOption1")]
[Parameter(Mandatory=$false, ParameterSetName="AtLeastOption2")]
[Parameter(Mandatory=$false, ParameterSetName="AtLeastOption3")]
$Option1,

[Parameter(Mandatory=$false, ParameterSetName="AtLeastOption1")]
[Parameter(Mandatory, ParameterSetName="AtLeastOption2")]
[Parameter(Mandatory=$false, ParameterSetName="AtLeastOption3")]
$Option2,

[Parameter(Mandatory=$false, ParameterSetName="AtLeastOption1")]
[Parameter(Mandatory=$false, ParameterSetName="AtLeastOption2")]
[Parameter(Mandatory, ParameterSetName="AtLeastOption3")]
$Option3
)

# Do stuff, but don't evaluate the plausibility of the given parameters here
}

但如您所见,它的扩展性很差。对于每个附加选项,我必须在所有其他选项中添加一行。能否以更高效和更易于维护的方式完成此操作?

正如我已经说过的,我不想检查代码中的参数,e。 G。通过评估 $PSBoundParameters。出于自动文档的原因,我希望它发生在参数定义中。


如果您需要真实世界的示例,请查看 Set-DhcpServerv4OptionValue它接受许多不同的选项(-DnsDomain-DnsServer-Router、...),其中可以全部使用,但没有任何意义是没有意义的。


注意:在提供了多个答案之后,我才意识到我的代码实际上不起作用,如果您提供了不止一个选项的话。

最佳答案

以下不是一个很好的解决方案 - 根据您所说的 auto-doc 的含义,它可能不适合您 - 但它可以很好地扩展,因为您只需要 < em>一个附加参数集:

function Set-Option {

[CmdletBinding(DefaultParameterSetName='Fail')]
Param(
[Parameter(ParameterSetName='AtLeastOne')]
$Option1,

[Parameter(ParameterSetName='AtLeastOne')]
$Option2,

[Parameter(ParameterSetName='AtLeastOne')]
$Option3,

# Note: All that 'DontShow' does is to exclude the param. from tab completion.
[Parameter(ParameterSetName='Fail', DontShow)]
${-} = $(throw "Please specify at least one option.")
)

# Do stuff, but don't evaluate the plausibility of the given parameters here
}
  • 所有真实参数都是可选并且属于不是默认值的相同参数集。

  • 虚拟参数的用途${-} ,这是默认参数集中唯一的一个,只是通过其默认值抛出错误。

    • 由于它的名字不规则,你实际上不能给它传递一个明确的值(这在这里是可取的,因为它纯粹是辅助而不是直接使用):你必须使用 -- <value> ,但是 --对参数绑定(bind)器有特殊意义(为后续参数停用命名参数绑定(bind))。

    • 不幸的是,属性(property)DontShow (例如 [Parameter(DontShow)])仅隐藏tab-completion 中的参数,而不是语法图中的参数。

因此,不幸的是,虚拟参数集及其参数出现在语法图中,因此 Set-Option -?显示如下:

SYNTAX
Set-Option [-- <Object>] [<CommonParameters>]

Set-Option [-Option1 <Object>] [-Option2 <Object>] [-Option3 <Object>] [<CommonParameters>]

请注意,语法图缺少您所需逻辑的符号。

关于powershell - 制作 PowerShell 所需的众多参数中的至少一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71574961/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com