# PowerShell trên Maguyva: đồ thị mã cho tập lệnh và module

Canonical source: https://maguyva.ai/vi/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 hỗ trợ PowerShell với AST, ký hiệu và đồ thị, để agent AI có thể lần theo hàm, lớp và lời gọi cmdlet qua các tập lệnh và module.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Shell
- Phần mở rộng: .ps1, .psd1, .psm1
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Nhóm hạ tầng và vận hành có kho lớn tệp `.ps1` và `.psm1` mà các tập lệnh gọi hàm của nhau.
- Module PowerShell được xây từ hàm nâng cao, lớp và enum.
- Runbook tự động hóa nơi agent cần thấy tập lệnh nào động tới một dịch vụ, thư mục chia sẻ hoặc khóa registry trước khi thay đổi.

## Workflow agent

- Tìm mọi nơi gọi một hàm nâng cao trước khi đổi tham số của nó.
- Liệt kê các tập lệnh gọi một cmdlet như `Restart-Service` trước khi sửa runbook.
- Lập bản đồ những hàm ghi vào một biến dùng chung trước khi tái cấu trúc module.

## PowerShell làm khó các công cụ AI hời hợt ở đâu

Hàm của bạn và cmdlet có sẵn dùng cùng một kiểu đặt tên. `Get-Invoice` và `Get-ChildItem` trông giống nhau, nên một công cụ loại bỏ lệnh "có sẵn" theo động từ cũng loại luôn hàm của bạn. Tập lệnh còn trộn mã cấp module, hàm, lớp và khối script trong cùng một tệp, khiến khó biết một dòng thuộc về hàm nào.

Maguyva giữ lại cả hai loại lời gọi và gán mỗi lời gọi cho hàm chứa nó.

## Maguyva trích xuất gì từ mã PowerShell

Maguyva bao quát các tệp `.ps1`, `.psm1` và `.psd1`. Hàm và phương thức của lớp được trích xuất thành callable, còn lớp và enum thành kiểu. Tham số của tập lệnh và phương thức được theo dõi, và thao tác đọc, ghi bên trong một hàm được gán cho hàm đó thay vì cho module.

Lời gọi cmdlet vẫn nằm trong đồ thị. PowerShell không áp dụng bộ lọc thư viện chuẩn mà phần lớn ngôn ngữ dùng, nên `Write-Host`, `Get-ChildItem` và `Restart-Service` xuất hiện như cạnh lời gọi bên cạnh các hàm `Get-*` và `Set-*` của bạn. Agent có thể hỏi tập lệnh nào khởi động lại một dịch vụ hay hàm nào ghi ra console và nhận câu trả lời mang tính cấu trúc.

Không có loại quan hệ nào bị đánh dấu là không áp dụng cho PowerShell, nên đồ thị còn ghi lại kế thừa lớp và triển khai interface, khởi tạo, luồng điều khiển, cùng thao tác đọc và ghi.

## Ví dụ prompt cho agent

- "Ai gọi `Invoke-Backup`, và từ những tập lệnh định kỳ nào?" (`find_symbol`, sau đó `dependency_search` theo chiều vào)
- "Những hàm nào gọi `Restart-Service`?" (`dependency_search`)
- "Lần theo những gì `Deploy-Site` làm từ đầu đến cuối." (`get_task_context`)

## Giới hạn đã biết

- Vì lời gọi cmdlet được giữ lại, các cmdlet rất phổ biến như `Write-Host` và `Select-Object` có rất nhiều cạnh đi vào. Hãy bắt đầu từ hàm của chính bạn khi muốn một đồ thị lời gọi tập trung.
- `Import-Module` và dot-sourcing là lệnh thông thường, nên preset `imports` trong `structural_search` không chọn được gì. Dùng `text_pattern_search` để liệt kê chúng.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Với mã .NET mà tập lệnh của bạn gọi tới, hãy đọc [hướng dẫn C#](/vi/languages/csharp).

## Chi tiết engine

- Hỗ trợ PowerShell bao quát các tệp `.ps1`, `.psm1` và `.psd1`. Hàm và phương thức của lớp là callable; lớp và enum là kiểu.
- Bộ lọc thư viện chuẩn bị tắt với PowerShell, nên lời gọi cmdlet như `Get-ChildItem` vẫn nằm trong đồ thị cạnh các hàm của chính bạn.
- Thao tác đọc và ghi bên trong một hàm được gán cho hàm đó, không phải cho module.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng cho hàm nâng cao hoặc lớp khi bạn cần định nghĩa và nơi gọi.
- `dependency_search`: Dùng duyệt theo chiều vào để thấy tập lệnh nào gọi một cmdlet như `Restart-Service`.
- `get_task_context`: Dùng cho prompt như "lần theo những gì `Deploy-Site` làm từ đầu đến cuối".
