gpt4 book ai didi

powershell - 验证任意数量的PowerShell脚本参数

转载 作者:行者123 更新时间:2023-12-03 01:02:52 24 4
gpt4 key购买 nike

在PowerShell中可以验证传递给脚本的参数,还可以启用自动完成功能,如下所示:
myscript.ps1:

param([Parameter(Mandatory=$false)][String][ValidateSet('abc',
'def',
'ghi')] $argument
)

但这只会为第一个参数启用自动完成功能。我希望“自动完成”参数的数量可以是任意的。

因此,键入后:
  • PS C:\> .\myscript.ps1 def(末尾的空白)和
  • 按下选项卡,我希望可能的参数再次自动完成PS C:\> .\myscript.ps1 def abs

  • 如何在 param(...)部分对此进行编码?

    最佳答案

    如果您确实希望将值作为用空格分隔的单个参数传递,请使用ValueFromRemainingArguments参数属性:

    param(
    [Parameter(ValueFromRemainingArguments)]
    [ValidateSet('abc', 'def', 'ghi')]
    [string[]] $argument
    )

    请注意, $argument现在是一个值数组,PowerShell在其中为您收集所有位置参数。

    不利的一面是,这会使所有位置参数都接受验证,因此,如果您还需要传递其他参数,则必须在其前面加上参数名称(例如 -foo bar)。

    因此,请考虑使用单个显式数组值参数代替:
    param(
    [ValidateSet('abc', 'def', 'ghi')]
    [string[]] $argument
    )

    这样,如果以 $argument作为分隔符传递, ,将接收多个值,并且除了制表符补全第一个值外,键入 ,后的每个附加值也可以制表符补全。
    ./myscript a<tab>  # -> ./myscript abc

    ./myscript abc, d<tab< # -> ./myscript abc, def

    关于powershell - 验证任意数量的PowerShell脚本参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436616/

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