覆盖PowerShell参数的解析模式?

时间:2016-05-13 13:41:50

标签: powershell powershell-v5.0

假设这个功能:

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 个答案:

答案 0 :(得分:1)

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

这些类实际上也可供您在PowerShell中使用,因此您可以看到它们的工作原理,但更改它们并非一切正常。您可以创建自己的解析器,然后使用AST来执行令牌?但是,您必须使用自定义应用程序调用脚本。很可能,语法是模棱两可的,这就是为什么它不被支持。

来自Here are some examples of using the Abstract Syntax Tree (AST) in PowerShell

Doug Finke