代码之家  ›  专栏  ›  技术社区  ›  craig

是否覆盖PowerShell参数的解析模式?

  •  3
  • craig  · 技术社区  · 9 年前

    假设此函数:

    function Get-Foo {
    
        param(
            [string[]]$Foos
        )
    
        Foreach ($Foo IN $Foos) {
            Write-Host "Foo: $Foo"
        }
    
    }
    

    使用字符串分隔符调用此函数( ' )创建阵列:

    PS> Get-Foo -Foos 'ABC 1', 'DEF 2'
    Foo: ABC 1
    Foo: DEF 2
    

    在不使用分隔符的情况下调用它会产生错误:

    PS> Get-Foo -Foos ABC 1, DEF 2
    Get-Foo : A positional parameter cannot be found that accepts argument 'System.Object[]'.
    At line:1 char:1
    + Get-Foo -Foos ABC 1, DEF 2
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Get-Foo], ParameterBindingException
        + FullyQualifiedErrorId : PositionalParameterNotFound,Get-Foo
    

    是否有一种方法可以覆盖参数的解析逻辑,使两种情况都能按需要运行?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community Mohan Dere    8 年前

    不,这不是函数定义的函数,这是语言的解析和解释方式。

    这些类实际上也可以在PowerShell中使用,所以您可以看到它们是如何工作的,但更改它们并没有那么实际。您可以创建自己的解析器,然后使用AST来执行标记吗?但是,您必须使用自定义应用程序调用脚本。很可能,这种语法是含糊不清的,这就是为什么它不被支持的原因。

    Here are some examples of using the Abstract Syntax Tree (AST) in PowerShell 从…起 Doug Finke .

    推荐文章