使用PowerShell从文件中提取函数体

时间:2017-03-02 06:12:37

标签: powershell

如何提取powershell函数定义的内容? 假设代码就像,

Function fun1($choice){
   switch($choice)
    {
       1{
        "within 1"
        }
       2{
        "within 2"
        }
       default{
        "within default"
        }

    }

}

fun1 1

我只想要函数定义的内容,而不是其他文本。

1 个答案:

答案 0 :(得分:3)

使用PowerShell 3.0+ Language namespace AST解析器:

$code = Get-Content -literal 'R:\source.ps1' -raw
$name = 'fun1'

$body = [Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null).
    Find([Func[Management.Automation.Language.Ast,bool]]{
        param ($ast)
        $ast.name -eq $name -and $ast.body
    }, $true) | ForEach {
        $_.body.extent.text
    }

在$ body中输出单个多行字符串:

{
   switch($choice)
    {
       1{
        "within 1"
        }
       2{
        "within 2"
        }
       default{
        "within default"
        }

    }

}

提取第一个函数定义主体,无论名称如何:

$body = [Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null).
    Find([Func[Management.Automation.Language.Ast,bool]]{$args[0].body}, $true) | ForEach {
        $_.body.extent.text
    }

要从function关键字开始提取整个功能定义,请使用$_.extent.text

$fun = [Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null).
    Find([Func[Management.Automation.Language.Ast,bool]]{$args[0].body}, $true) | ForEach {
        $_.extent.text
    }