跳转到内容
cd /languages
  • Windows 自动化
  • Shell
  • AST 和符号支持

Maguyva 的 PowerShell 支持:面向脚本与模块的代码图谱

Maguyva 以 AST、符号和图谱支持 PowerShell,让 AI 智能体跨越脚本和模块追踪函数、类和 cmdlet 调用。

PowerShell 让浅层 AI 工具栽跟头的地方

你的函数和内置 cmdlet 共用同一种命名风格。Get-Invoice 和 Get-ChildItem 看起来一模一样,所以按动词剔除“内置命令”的工具会连你自己的函数一起扔掉。脚本还会把模块级代码、函数、类和脚本块混在一个文件里,很难判断某一行属于哪个函数。

Maguyva 会保留这两类调用,并把每个调用归属到它所在的函数。

Maguyva 在 PowerShell 中提取什么

Maguyva 支持 .ps1、.psm1 和 .psd1 文件。函数和类方法作为可调用对象提取,类和枚举作为类型提取。脚本参数和方法参数都会被跟踪,函数内部的读写会归属到该函数,而不是模块。

cmdlet 调用会留在图谱中。PowerShell 不使用大多数语言都会启用的标准库过滤器,因此 Write-Host、Get-ChildItem 和 Restart-Service 会作为调用边出现在你自己的 Get-* 和 Set-* 函数旁边。智能体可以询问哪些脚本会重启某个服务、哪些函数会向控制台写入,并得到基于结构的答案。

PowerShell 没有被标记为不适用的关系类型,因此图谱还会记录类继承与接口实现、实例化、控制流以及读写。

智能体提示词示例

  • “谁调用了 Invoke-Backup,来自哪些计划任务脚本?”(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • “哪些函数调用了 Restart-Service?”(dependency_search)
  • “从头到尾追踪 Deploy-Site 做了什么。”(get_task_context)

已知限制

  • 由于 cmdlet 调用会被保留,Write-Host 和 Select-Object 等非常常见的调用会有大量传入边。想要聚焦的调用图时,请从你自己的函数入手。
  • Import-Module 和点源加载都是普通命令,因此 structural_search 中的 imports 预设什么也选不到。列出它们请使用 text_pattern_search。

后续步骤

通过快速入门连接仓库,然后在兼容性页面查看支持矩阵。脚本所调用的 .NET 代码请阅读 C# 指南。

最适合场景

  • > 拥有大量 `.ps1` 和 `.psm1` 资产、脚本之间相互调用函数的基础设施与运维团队。
  • > 由高级函数、类和枚举构建的 PowerShell 模块。
  • > 在变更前需要让智能体看清哪些脚本会触及某个服务、文件共享或注册表项的自动化运行手册。

智能体工作流

  • > 在修改高级函数的参数之前,找到它的所有调用方。
  • > 在修改运行手册之前,列出调用 `Restart-Service` 等 cmdlet 的脚本。
  • > 在重构模块之前,梳理哪些函数会写入某个共享变量。

引擎细节

  • > PowerShell 支持覆盖 `.ps1`、`.psm1` 和 `.psd1`。函数和类方法是可调用对象,类和枚举是类型。
  • > PowerShell 关闭了标准库过滤器,因此 `Get-ChildItem` 等 cmdlet 调用会和你自己的函数一起留在图谱中。
  • > 函数内部的读写会归属到该函数,而不是模块。

常用 MCP 入口工具

  • find_symbol

    需要高级函数或类的定义和调用方时使用它。

  • dependency_search

    对 `Restart-Service` 等 cmdlet 使用 incoming 方向遍历,查看哪些脚本调用了它。

  • get_task_context

    用于“从头到尾追踪 `Deploy-Site` 做了什么”这类提示词。