gpt4 book ai didi

Powershell "special"开关参数

转载 作者:行者123 更新时间:2023-12-02 23:18:25 26 4
gpt4 key购买 nike

我有下面的powershell功能

Function Test
{
Param
(
[Parameter()]
[string]$Text = "default text"
)

Write-Host "Text : $($Text)"
}

我希望能够像下面这样调用这个函数:

测试-文本 :应该在主机上显示默认文本

测试-文本“另一个文本” :应该在主机上显示提供的文本

我的问题是 powershell 中不允许使用第一种语法 ..

关于如何实现这一目标的任何想法?
我想要一种可以采用 bool 值以外的值的“开关”参数。

谢谢

最佳答案

Maximilian Burszley's helpful answer为单个参数提供了一种解决方法,通过一个通过 ValueFromRemainingArguments 收集所有按位置传递的参数的包罗万象的参数。参数属性。
但是,从根本上说,PowerShell 不支持您所要求的内容:
PowerShell 从 7.2 开始不支持具有可选值的参数 - [switch] 除外参数,限制为 [bool]值(value)观。
那是:

  • 您声明的类型不是 [switch] 的任何参数总是需要一个值 (争论)。
  • 唯一的其他选择是不加选择地在 ValueFromRemainingArguments 中收集任何未绑定(bind)的位置参数。 -标记参数 , 但是 您将无法将这些与任何特定的其他绑定(bind)参数相关联 .

  • 换句话说:
  • 如果您碰巧只需要一个可选参数参数,ValueFromRemainingArguments可以为您工作(除了您应该手动处理错误接收多个值的情况),如 Maximilian Burszley 的回答所示。
  • 如果您有两个或更多这样的参数,则该方法变得不切实际:您必须知道参数的传递顺序(PowerShell 不会告诉您)才能将剩余的位置参数与正确的参数相关联。

  • [switch]参数(以想象中的 -Quiet 开关为例):
  • 默认值 - 如果你只是通过 -Quiet -是$true .
  • $false通常通过根本不指定开关来指示(即省略 -Quiet )

  • 但是, 您可以通过在开关名称后面加上 : 来显式指定一个值。 ,后跟 bool 值:
  • -Quiet:$true-Quiet 相同
  • -Quiet:$false通常与省略 -Quiet 相同;但是,在极少数情况下,命令会区分省略的开关和带有显式 $false 的开关。值(value);值得注意的是,common -Confirm parameter允许使用 -Confirm:$false - 相对于省略-Confirm - 覆盖 $ConfirmPreference 的值偏好变量。

  • :因为所有参数都支持参数名称与其参数之间的分隔符(与通常的空格字符相反), [switch] parameters 它是必须的,以便明确表明后面是 switch 参数的参数(默认情况下不需要参数),而不是独立的位置参数。

    以上告诉我们 PowerShell 已经具有对可选参数参数的一般支持的语法 ,所以在 future 的某个时刻 正如 GitHub issue #12104 中所建议的,它可以支持任何数据类型。 .

    关于Powershell "special"开关参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838941/

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