执行脚本中的所有功能

时间:2016-12-07 23:13:30

标签: powershell

如果我的脚本具有某些功能,例如:

function FunctionOne{}
function FunctionTwo{}

如何在同一个脚本中一行调用它们,而无需指定每个函数的名称?

我想做类似的事情:

Call-AllFunctionsInCurrentScriptConsecutively #calls FunctionOne then FunctionTwo

2 个答案:

答案 0 :(得分:1)

This blog post建议使用ParseFile()来解析脚本:

$filename = 'C:\path\to\your.ps1'

[ref]$tokens      = $null
[ref]$parseErrors = $null
$ast = [Management.Automation.Language.Parser]::ParseFile($filename, $tokens, $parseErrors)

然后你可以通过调用操作符调用函数(在你点源脚本之后):

$ast.EndBlock.Statements | Where-Object { $_.Name } | ForEach-Object { & $_.Name }

要在脚本中使用此文件,请将文件名替换为$MyInvocation.MyCommand.Path

答案 1 :(得分:0)

解析文件并从AST中获取函数名称可能是最可靠的选择。

更低技术的方法是在获取脚本之前和之后简单地区分功能列表:

$InitialFunctions = Get-ChildItem function: -Name
. C:\path\to\script.ps1
Get-ChildItem function: -Name |Where-Object {$InitialFunctions -notcontains $_} |ForEach-Object {
    & $_
}