如果我的脚本具有某些功能,例如:
function FunctionOne{}
function FunctionTwo{}
如何在同一个脚本中一行调用它们,而无需指定每个函数的名称?
我想做类似的事情:
Call-AllFunctionsInCurrentScriptConsecutively #calls FunctionOne then FunctionTwo
答案 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 {
& $_
}