从脚本文件中提取函数

时间:2010-08-19 10:08:56

标签: reflection powershell function

是否有更简单的方法来获取给定Powershell脚本中所有函数的列表,而不是将函数签名与正则表达式匹配(在Powershell中)?

3 个答案:

答案 0 :(得分:4)

我想有很多方法。一个不解析文件,很容易:

@"
function mya { write-host mya }
function myb { write-host myb }
Invoke-Expression "function hiddena { write-host by invoke-expression }"
"@ | set-content c:\test1.ps1

$functions = & { 
  $before = gci function:\
  . c:\test1.ps1 
  $after = gci function:\
  Compare-Object $before $after -SyncWindow $before.Length | Select -expand InputObject
}
$functions | ? { $_.Name -match 'a' }


> CommandType     Name                          Definition
> -----------     ----                          ----------
> Function        hiddena                       write-host 'by invoke-expression'
> Function        mya                           write-host 'mya' 

我创建了一个子范围,我在其中导入了函数,然后简单地比较了添加的内容。整个scriptblock返回您进一步处理的附加功能。

请注意,如果仅使用tokenizer,则无法找到函数hiddena,因为它包含在普通字符串中。如果您使用例如,也是如此Set-Content function:\testa -value { write-host 'by set-item' }

答案 1 :(得分:3)

这是一个使用PowerShell的Tokenizer的版本。不确定它是否更容易。

Using PowerShell’s PsParser::Tokenize, Discover Functions in PowerShell Scripts

答案 2 :(得分:3)

如果您知道包含函数的脚本文件的完整路径,并且会话中已加载了函数:

PS> dir功能:|其中{$ _。scriptblock.file -eq'd:\ functions.ps1'}