Przejdź do treści
cd /languages
  • Automatyzacja Windows
  • Shell
  • Obsługa AST i symboli

PowerShell w Maguyva: grafy kodu dla skryptów i modułów

Maguyva obsługuje PowerShell przez AST, symbole i graf, dzięki czemu agenci AI śledzą funkcje, klasy i wywołania cmdletów w skryptach i modułach.

Gdzie PowerShell sprawia kłopot powierzchownym narzędziom AI

Twoje funkcje i wbudowane cmdlety mają ten sam styl nazewnictwa. Get-Invoice i Get-ChildItem wyglądają tak samo, więc narzędzie, które odrzuca „wbudowane” polecenia według czasownika, wyrzuca też twoje funkcje. Skrypty mieszają ponadto w jednym pliku kod na poziomie modułu, funkcje, klasy i bloki skryptu, przez co trudno stwierdzić, do której funkcji należy dana linia.

Maguyva zachowuje oba rodzaje wywołań i przypisuje każde z nich do funkcji, w której się znajduje.

Co Maguyva wyodrębnia w PowerShell

Maguyva obejmuje pliki .ps1, .psm1 i .psd1. Funkcje i metody klas są wyodrębniane jako elementy wywoływalne, a klasy i typy wyliczeniowe jako typy. Śledzone są parametry skryptów i metod, a odczyty i zapisy wewnątrz funkcji są przypisywane do tej funkcji, a nie do modułu.

Wywołania cmdletów zostają w grafie. PowerShell nie stosuje filtra biblioteki standardowej, którego używa większość języków, więc Write-Host, Get-ChildItem i Restart-Service pojawiają się jako krawędzie wywołań obok twoich własnych funkcji Get-* i Set-*. Agent może zapytać, które skrypty restartują usługę albo które funkcje piszą do konsoli, i dostać odpowiedź opartą na strukturze.

Dla PowerShell żaden typ relacji nie jest oznaczony jako nie mający zastosowania, więc graf zapisuje też dziedziczenie klas i implementację interfejsów, tworzenie instancji, przepływ sterowania oraz odczyty i zapisy.

Przykładowe prompty dla agentów

  • „Kto wywołuje Invoke-Backup i z których zaplanowanych skryptów?” (find_symbol, potem dependency_search incoming)
  • „Które funkcje wywołują Restart-Service?” (dependency_search)
  • „Prześledź, co robi Deploy-Site od początku do końca.” (get_task_context)

Znane ograniczenia

  • Ponieważ wywołania cmdletów są zachowywane, bardzo popularne, takie jak Write-Host i Select-Object, mają ogromną liczbę krawędzi przychodzących. Gdy chcesz skupionego grafu wywołań, zacznij od własnej funkcji.
  • Import-Module i dot-sourcing to zwykłe polecenia, więc preset imports w structural_search niczego nie wybiera. Do ich wypisania użyj text_pattern_search.

Kolejne kroki

Podłącz repozytorium za pomocą szybkiego startu, a potem sprawdź macierz obsługi na stronie zgodności. W przypadku kodu .NET wywoływanego przez twoje skrypty przeczytaj przewodnik po C#.

Najlepsze dopasowanie

  • > Zespoły infrastruktury i operacji z dużymi zbiorami plików `.ps1` i `.psm1`, których skrypty wywołują nawzajem swoje funkcje.
  • > Moduły PowerShell zbudowane z funkcji zaawansowanych, klas i typów wyliczeniowych.
  • > Runbooki automatyzacji, w których agenci muszą przed zmianą zobaczyć, które skrypty dotykają usługi, udziału plików lub klucza rejestru.

Workflow agentów

  • > Znaleźć wszystkie miejsca wywołujące funkcję zaawansowaną przed zmianą jej parametrów.
  • > Wypisać skrypty wywołujące cmdlet, taki jak `Restart-Service`, przed zmianą runbooka.
  • > Zmapować funkcje zapisujące do współdzielonej zmiennej przed refaktoryzacją modułu.

Szczegóły silnika

  • > Obsługa PowerShell obejmuje `.ps1`, `.psm1` i `.psd1`. Funkcje i metody klas są elementami wywoływalnymi, a klasy i typy wyliczeniowe typami.
  • > Dla PowerShell filtr biblioteki standardowej jest wyłączony, więc wywołania cmdletów, takich jak `Get-ChildItem`, zostają w grafie obok twoich własnych funkcji.
  • > Odczyty i zapisy wewnątrz funkcji są przypisywane do tej funkcji, a nie do modułu.

Przydatne punkty wejścia MCP

  • find_symbol

    Użyj go dla funkcji zaawansowanej lub klasy, gdy potrzebujesz definicji i wywołujących.

  • dependency_search

    Użyj przejścia incoming na cmdlecie, takim jak `Restart-Service`, aby zobaczyć, które skrypty go wywołują.

  • get_task_context

    Użyj go do promptów takich jak „Prześledź, co robi `Deploy-Site` od początku do końca”.