# PowerShell บน Maguyva: กราฟโค้ดสำหรับสคริปต์และโมดูล

Canonical source: https://maguyva.ai/th/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 รองรับ PowerShell ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามฟังก์ชัน คลาส และการเรียก cmdlet ข้ามสคริปต์และโมดูลได้

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- เชลล์
- นามสกุลไฟล์: .ps1, .psd1, .psm1
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- ทีมโครงสร้างพื้นฐานและปฏิบัติการที่มีไฟล์ `.ps1` และ `.psm1` จำนวนมาก ซึ่งสคริปต์เรียกฟังก์ชันของกันและกัน
- โมดูล PowerShell ที่สร้างจากฟังก์ชันขั้นสูง คลาส และ enum
- รันบุ๊กงานอัตโนมัติที่เอเจนต์ต้องเห็นว่าสคริปต์ใดแตะต้องเซอร์วิส แชร์ไฟล์ หรือคีย์รีจิสทรีก่อนมีการเปลี่ยนแปลง

## เวิร์กโฟลว์ของเอเจนต์

- ค้นหาผู้เรียกทั้งหมดของฟังก์ชันขั้นสูงก่อนเปลี่ยนพารามิเตอร์
- แสดงรายการสคริปต์ที่เรียก cmdlet อย่าง `Restart-Service` ก่อนแก้รันบุ๊ก
- ทำแผนที่ฟังก์ชันที่เขียนลงตัวแปรที่ใช้ร่วมกันก่อนรีแฟกเตอร์โมดูล

## จุดที่ PowerShell ทำให้เครื่องมือ AI แบบผิวเผินสะดุด

ฟังก์ชันของคุณกับ cmdlet ในตัวใช้รูปแบบการตั้งชื่อเดียวกัน `Get-Invoice` และ `Get-ChildItem` ดูเหมือนกัน เครื่องมือที่ทิ้งคำสั่ง "ในตัว" ตามคำกริยาจึงทิ้งฟังก์ชันของคุณไปด้วย สคริปต์ยังผสมโค้ดระดับโมดูล ฟังก์ชัน คลาส และบล็อกสคริปต์ไว้ในไฟล์เดียว จึงยากที่จะรู้ว่าบรรทัดหนึ่งเป็นของฟังก์ชันใด

Maguyva เก็บการเรียกทั้งสองแบบไว้ และผูกแต่ละการเรียกกับฟังก์ชันที่มันอยู่ภายใน

## Maguyva ดึงอะไรจากโค้ด PowerShell ได้บ้าง

Maguyva ครอบคลุมไฟล์ `.ps1`, `.psm1` และ `.psd1` ฟังก์ชันและเมธอดของคลาสถูกดึงออกมาเป็นสิ่งที่เรียกใช้ได้ ส่วนคลาสและ enum เป็นไทป์ พารามิเตอร์ของสคริปต์และเมธอดถูกติดตาม และการอ่านและเขียนภายในฟังก์ชันจะผูกกับฟังก์ชันนั้น ไม่ใช่กับโมดูล

การเรียก cmdlet ยังคงอยู่ในกราฟ PowerShell ไม่ใช้ตัวกรองไลบรารีมาตรฐานที่ภาษาส่วนใหญ่ใช้ ดังนั้น `Write-Host`, `Get-ChildItem` และ `Restart-Service` จึงปรากฏเป็นเส้นเชื่อมการเรียกข้างฟังก์ชัน `Get-*` และ `Set-*` ของคุณเอง เอเจนต์ถามได้ว่าสคริปต์ใดรีสตาร์ตเซอร์วิส หรือฟังก์ชันใดเขียนลงคอนโซล แล้วได้คำตอบเชิงโครงสร้าง

ไม่มีประเภทความสัมพันธ์ใดถูกทำเครื่องหมายว่าไม่เกี่ยวข้องสำหรับ PowerShell กราฟจึงบันทึกการสืบทอดคลาสและการอิมพลีเมนต์อินเทอร์เฟซ การสร้างอินสแตนซ์ โฟลว์การควบคุม และการอ่านและเขียนด้วย

## ตัวอย่างพรอมต์สำหรับเอเจนต์

- "ใครเรียก `Invoke-Backup` และเรียกจากสคริปต์ตามกำหนดเวลาไหนบ้าง" (`find_symbol` จากนั้น `dependency_search` ทิศทางขาเข้า)
- "ฟังก์ชันใดบ้างที่เรียก `Restart-Service`" (`dependency_search`)
- "ติดตามว่า `Deploy-Site` ทำอะไรตั้งแต่ต้นจนจบ" (`get_task_context`)

## ข้อจำกัดที่ทราบ

- เนื่องจากเก็บการเรียก cmdlet ไว้ cmdlet ที่ใช้บ่อยมากอย่าง `Write-Host` และ `Select-Object` จึงมีเส้นเชื่อมขาเข้าจำนวนมาก เริ่มจากฟังก์ชันของคุณเองเมื่อต้องการกราฟการเรียกที่เจาะจง
- `Import-Module` และการโหลดสคริปต์แบบดอตซอร์ซเป็นคำสั่งทั่วไป ดังนั้นพรีเซ็ต `imports` ใน `structural_search` จึงไม่เลือกอะไรเลย ใช้ `text_pattern_search` เพื่อแสดงรายการ

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) สำหรับโค้ด .NET ที่สคริปต์ของคุณเรียก ให้อ่าน[คู่มือภาษา C#](/th/languages/csharp)

## รายละเอียดเอนจิน

- การรองรับ PowerShell ครอบคลุมไฟล์ `.ps1`, `.psm1` และ `.psd1` ฟังก์ชันและเมธอดของคลาสเป็นสิ่งที่เรียกใช้ได้ ส่วนคลาสและ enum เป็นไทป์
- ตัวกรองไลบรารีมาตรฐานถูกปิดสำหรับ PowerShell การเรียก cmdlet อย่าง `Get-ChildItem` จึงยังอยู่ในกราฟข้างฟังก์ชันของคุณเอง
- การอ่านและเขียนภายในฟังก์ชันจะผูกกับฟังก์ชันนั้น ไม่ใช่กับโมดูล

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: ใช้กับฟังก์ชันขั้นสูงหรือคลาสเมื่อต้องการนิยามและผู้เรียก
- `dependency_search`: ใช้การท่องกราฟขาเข้าเพื่อดูว่าสคริปต์ใดเรียก cmdlet อย่าง `Restart-Service`
- `get_task_context`: ใช้กับพรอมต์อย่าง "ติดตามว่า `Deploy-Site` ทำอะไรตั้งแต่ต้นจนจบ"
