2016-05-13 71 views
3

假定這樣的功能:重寫PowerShell參數的解析模式?

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

號這不是函數定義的函數,這就是語言是如何分析和解釋。

這些類是實際可供您在PowerShell中使用爲好,所以你可以看到他們是如何工作的,但改變它們不是那麼實用。你可以創建自己的解析器,然後使用AST來執行令牌?但是,您必須使用自定義應用程序調用腳本。很可能,語法無論如何都是不明確的,這就是爲什麼它不被支持的原因。

Here are some examples of using the Abstract Syntax Tree (AST) in PowerShellDoug Finke