Перейти до вмісту
cd /languages
  • Автоматизація Windows
  • Оболонка
  • Підтримка AST і символів

PowerShell у Maguyva: графи коду для скриптів і модулів

Maguyva підтримує PowerShell з AST, символами та графом, щоб ШІ-агенти могли простежувати функції, класи та виклики командлетів у скриптах і модулях.

Де PowerShell збиває з пантелику поверхові ШІ-інструменти

Ваші функції та вбудовані командлети мають однаковий стиль іменування. Get-Invoice і Get-ChildItem виглядають однаково, тому інструмент, що відкидає «вбудовані» команди за дієсловом, відкидає й ваші функції. Крім того, скрипти змішують код рівня модуля, функції, класи та блоки скриптів в одному файлі, і важко зрозуміти, якій функції належить рядок.

Maguyva зберігає обидва види викликів і приписує кожен виклик функції, всередині якої він розташований.

Що Maguyva витягує з коду PowerShell

Maguyva охоплює файли .ps1, .psm1 і .psd1. Функції та методи класів витягуються як об’єкти виклику, а класи й переліки як типи. Параметри скриптів і методів відстежуються, а читання й запис усередині функції приписуються цій функції, а не модулю.

Виклики командлетів лишаються в графі. 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)

Відомі обмеження

  • Оскільки виклики командлетів зберігаються, дуже поширені командлети на кшталт Write-Host і Select-Object мають багато вхідних ребер. Коли потрібен сфокусований граф викликів, починайте з власної функції.
  • Import-Module і підключення скриптів через крапку є звичайними командами, тому пресет imports у structural_search нічого не вибирає. Щоб перелічити їх, використовуйте text_pattern_search.

Наступні кроки

Під’єднайте репозиторій за швидким стартом, потім перегляньте матрицю підтримки на сторінці сумісності. Для коду .NET, який викликають ваші скрипти, прочитайте посібник із C#.

Найкраще підходить

  • > Команди інфраструктури та експлуатації з великими наборами `.ps1` і `.psm1`, де скрипти викликають функції одне одного.
  • > Модулі PowerShell, побудовані з розширених функцій, класів і переліків.
  • > Ранбуки автоматизації, де агентові треба побачити, які скрипти зачіпають службу, спільну папку чи розділ реєстру, перш ніж щось змінювати.

Робочі процеси агента

  • > Знайти всі виклики розширеної функції, перш ніж змінювати її параметри.
  • > Перелічити скрипти, що викликають командлет на кшталт `Restart-Service`, перш ніж змінювати ранбук.
  • > Скласти карту функцій, які записують у спільну змінну, перед рефакторингом модуля.

Деталі рушія

  • > Підтримка PowerShell охоплює файли `.ps1`, `.psm1` і `.psd1`. Функції та методи класів є об'єктами виклику; класи й переліки є типами.
  • > Фільтр стандартної бібліотеки для PowerShell вимкнено, тому виклики командлетів на кшталт `Get-ChildItem` лишаються в графі поруч із вашими функціями.
  • > Читання й запис усередині функції приписуються цій функції, а не модулю.

Корисні точки входу MCP

  • find_symbol

    Використовуйте для розширеної функції чи класу, коли потрібні визначення й виклики.

  • dependency_search

    Використовуйте обхід вхідних зв'язків, щоб побачити, які скрипти викликають командлет на кшталт `Restart-Service`.

  • get_task_context

    Використовуйте для промптів на кшталт «простеж, що робить `Deploy-Site` від початку до кінця».