如何列出PowerShell脚本.ps1文件中定义的所有函数?
列出PowerShell脚本文件中定义的所有函数
有几种实用方法可以实现这个需求,可根据场景选择:
方法1:不导入脚本,通过AST解析(推荐,无副作用)
利用PowerShell的抽象语法树(AST)直接解析脚本文件,无需导入即可提取所有函数定义,不会执行脚本代码,安全可靠:
$scriptPath = ".\your-script.ps1" # 解析脚本文件生成AST $ast = [System.Management.Automation.Language.Parser]::ParseFile($scriptPath, [ref]$null, [ref]$null) # 查找所有函数定义节点并提取信息 $ast.FindAll({ $args[0] -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true) | Select-Object Name, StartLineNumber
输出会包含函数名和对应的起始行号,方便定位代码位置。
方法2:对比导入前后的函数列表(已导入脚本时使用)
如果已经通过点运算符导入了脚本,可以通过对比导入前后的函数集合,找出脚本新增的函数:
# 记录导入前的系统函数列表 $preImport = Get-ChildItem Function:\ # 点源导入目标脚本 . .\your-script.ps1 # 对比得到脚本导入的新函数 Compare-Object -ReferenceObject $preImport -DifferenceObject (Get-ChildItem Function:\) -Property Name | Where-Object SideIndicator -eq '=>' | Select-Object -ExpandProperty Name
注意:如果脚本修改了已存在的函数,这种方法无法检测到,仅适用于新增函数的场景。
方法3:正则匹配(简单场景应急用)
如果脚本结构简单(函数都是单行function 函数名 { ... }格式,无注释或字符串中的干扰内容),可以用正则快速提取:
Get-Content ".\your-script.ps1" | Select-String '^function\s+(\w+)' | ForEach-Object { $_.Matches.Groups[1].Value }
这种方法局限性大,容易误匹配或漏匹配,仅适合临时快速查看。
内容的提问来源于stack exchange,提问作者Fajela Tajkiya
相关产品推荐
相关产品推荐

