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

Canonical source: https://maguyva.ai/zh-hans/languages/powershell

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## 支持情况速览

- 支持等级: AST 和符号支持
- Shell
- 扩展名: .ps1, .psd1, .psm1
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言为图谱感知搜索提供符号和关系；支持的边类型随其原生构造而异。
- 同时支持 AST 解析和符号提取。

## 最适合场景

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

## 智能体工作流

- 在修改高级函数的参数之前，找到它的所有调用方。
- 在修改运行手册之前，列出调用 `Restart-Service` 等 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`。

## 后续步骤

通过[快速入门](/zh-hans/docs/quickstart)连接仓库，然后在[兼容性页面](/zh-hans/docs/compatibility)查看支持矩阵。脚本所调用的 .NET 代码请阅读 [C# 指南](/zh-hans/languages/csharp)。

## 引擎细节

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

## 常用 MCP 入口工具

- `find_symbol`: 需要高级函数或类的定义和调用方时使用它。
- `dependency_search`: 对 `Restart-Service` 等 cmdlet 使用 incoming 方向遍历，查看哪些脚本调用了它。
- `get_task_context`: 用于“从头到尾追踪 `Deploy-Site` 做了什么”这类提示词。
