Powershell 在ps1中查找函数并调用

Powershell 在ps1中查找函数并调用,powershell,powershell-3.0,Powershell,Powershell 3.0,如何找到特定.ps1文件中存在的所有已点源化的函数,并在循环中调用这些方法?不需要任何参数 我们知道,使用Get ChildItem函数:\n将列出shell中的所有方法 一种解决方案是为.ps1文件中的所有函数使用特定的命名约定,并使用Get ChildItem函数:\unique\u pattern*search。这确实感觉有点脆弱 此外,我不知道如何根据Get ChildItem的返回信息调用函数。有什么想法吗?使用Ronald Rink创建的函数。 您可以将脚本另存为.ps1,执行后,您

如何找到特定.ps1文件中存在的所有已点源化的函数,并在循环中调用这些方法?不需要任何参数

我们知道,使用Get ChildItem函数:\n将列出shell中的所有方法

一种解决方案是为.ps1文件中的所有函数使用特定的命名约定,并使用Get ChildItem函数:\unique\u pattern*search。这确实感觉有点脆弱


此外,我不知道如何根据Get ChildItem的返回信息调用函数。有什么想法吗?

使用Ronald Rink创建的函数。 您可以将脚本另存为.ps1,执行后,您将能够看到其中的函数。因此,您还可以将其放入脚本中,以枚举所有自定义函数

他已利用这一机会实现了这一目标

以下是相同的参考链接:


希望有帮助。

使用Ronald Rink创建的功能。 您可以将脚本另存为.ps1,执行后,您将能够看到其中的函数。因此,您还可以将其放入脚本中,以枚举所有自定义函数

他已利用这一机会实现了这一目标

以下是相同的参考链接:


希望有帮助。

使用PowerShell 3.0+解析器列出ps1文件中的所有顶级函数名:

在脚本完成后,在变量中按名称调用函数:

& $name param1 param2 param3

使用PowerShell 3.0+解析器列出ps1文件中的所有顶级函数名:

在脚本完成后,在变量中按名称调用函数:

& $name param1 param2 param3

然而,另一种可能性并不认为它是最好的,但根据您的用例,它可能会给您提供另一条可遵循的路径:

$before = dir function:\

. .\test.ps1
# test.ps1 contains
# function f1 { Write-Output "f1 called" }
# function f2 { Write-Output "f2 called" }
# function f3 { Write-Output "f3 called" }

$after = dir function:\

$newFunctions = compare-object $before $after | ?{ $_.SideIndicator -eq "=>" } | select -ExpandProperty InputObject

$newFunctions | %{
    . $_
}

然而,另一种可能性并不认为它是最好的,但根据您的用例,它可能会给您提供另一条可遵循的路径:

$before = dir function:\

. .\test.ps1
# test.ps1 contains
# function f1 { Write-Output "f1 called" }
# function f2 { Write-Output "f2 called" }
# function f3 { Write-Output "f3 called" }

$after = dir function:\

$newFunctions = compare-object $before $after | ?{ $_.SideIndicator -eq "=>" } | select -ExpandProperty InputObject

$newFunctions | %{
    . $_
}

基于Ronald和@wOxxOm的答案,这是一个单行方法,用于提供当前正在执行的脚本文件的本地定义函数。由于我们使用的是AST,所以这里不会显示任何源于点的函数。另一件需要注意的事情是,这将处理没有任何Begin或Process块的情况,因为在这种情况下,AST将把整个脚本放入End块

$MyInvocation.MyCommand.ScriptBlock.Ast.EndBlock.Statements.Where{$\是[Management.Automation.Language.FunctionDefinitionAst]}选择-expand Name

基于Ronald和@wOxxOm的答案,这是一个单行方法,用于提供当前正在执行的脚本文件的本地定义函数。由于我们使用的是AST,所以这里不会显示任何源于点的函数。另一件需要注意的事情是,这将处理没有任何Begin或Process块的情况,因为在这种情况下,AST将把整个脚本放入End块

$MyInvocation.MyCommand.ScriptBlock.Ast.EndBlock.Statements.Where{$\是[Management.Automation.Language.FunctionDefinitionAst]}选择-expand Name