sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-05 01:24:10 30 4
mua khóa gpt4 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、...),其中可以全部使用,但没有任何意义是没有意义的。


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

1 Câu trả lời

以下不是一个很好的解决方案 - 根据您所说的 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
}
  • 所有真实参数都是可选并且属于KHÔNG默认值的相同参数集。

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

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

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

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

SYNTAX
Set-Option [-- ] []

Set-Option [-Option1 ] [-Option2 ] [-Option3 ] []

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

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

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com