Vai al contenuto
cd /languages
  • Automazione Windows
  • Shell
  • Supporto AST e simboli

PowerShell in Maguyva: grafi del codice per script e moduli

Maguyva supporta PowerShell con AST, simboli e grafo, così gli agenti IA seguono funzioni, classi e chiamate a cmdlet in script e moduli.

Dove PowerShell fa inciampare gli strumenti di IA superficiali

Le tue funzioni e i cmdlet integrati seguono lo stesso stile di denominazione. Get-Invoice e Get-ChildItem sembrano uguali, quindi uno strumento che scarta i comandi “integrati” in base al verbo butta via anche le tue funzioni. Gli script mescolano inoltre codice a livello di modulo, funzioni, classi e blocchi di script in un unico file, ed è difficile capire a quale funzione appartenga una riga.

Maguyva mantiene entrambi i tipi di chiamata e attribuisce ciascuna alla funzione in cui si trova.

Cosa estrae Maguyva in PowerShell

Maguyva copre i file .ps1, .psm1 e .psd1. Funzioni e metodi di classe vengono estratti come callable, e classi ed enum come tipi. I parametri di script e di metodo vengono tracciati, e letture e scritture dentro una funzione vengono attribuite a quella funzione invece che al modulo.

Le chiamate ai cmdlet restano nel grafo. PowerShell non applica il filtro della libreria standard usato dalla maggior parte dei linguaggi, quindi Write-Host, Get-ChildItem e Restart-Service compaiono come archi di chiamata accanto alle tue funzioni Get-* e Set-*. Un agente può chiedere quali script riavviano un servizio, o quali funzioni scrivono sulla console, e ottenere una risposta strutturale.

Per PowerShell nessun tipo di relazione è marcato come non applicabile, quindi il grafo registra anche ereditarietà tra classi e implementazione di interfacce, istanziazione, flusso di controllo e letture e scritture.

Esempi di prompt per agenti

  • “Chi chiama Invoke-Backup, e da quali script pianificati?” (find_symbol, poi dependency_search incoming)
  • “Quali funzioni chiamano Restart-Service?” (dependency_search)
  • “Traccia cosa fa Deploy-Site dall’inizio alla fine.” (get_task_context)

Limiti noti

  • Poiché le chiamate ai cmdlet vengono mantenute, quelle molto comuni come Write-Host e Select-Object hanno moltissimi archi in entrata. Parti dalla tua funzione quando vuoi un grafo delle chiamate mirato.
  • Import-Module e il dot-sourcing sono comandi normali, quindi il preset imports di structural_search non seleziona nulla. Usa text_pattern_search per elencarli.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Per il codice .NET chiamato dai tuoi script, leggi la guida a C#.

Il più adatto per

  • > Team di infrastruttura e operations con grandi patrimoni di `.ps1` e `.psm1` i cui script si chiamano a vicenda le funzioni.
  • > Moduli PowerShell costruiti con funzioni avanzate, classi ed enum.
  • > Runbook di automazione in cui gli agenti devono vedere quali script toccano un servizio, una condivisione di file o una chiave di registro prima di una modifica.

Workflow degli agenti

  • > Trovare tutti i chiamanti di una funzione avanzata prima di cambiarne i parametri.
  • > Elencare quali script chiamano un cmdlet come `Restart-Service` prima di cambiare un runbook.
  • > Mappare quali funzioni scrivono in una variabile condivisa prima di rifattorizzare un modulo.

Dettagli del motore

  • > Il supporto a PowerShell copre `.ps1`, `.psm1` e `.psd1`. Funzioni e metodi di classe sono callable, classi ed enum sono tipi.
  • > Per PowerShell il filtro della libreria standard è disattivato, quindi le chiamate a cmdlet come `Get-ChildItem` restano nel grafo accanto alle tue funzioni.
  • > Letture e scritture dentro una funzione vengono attribuite a quella funzione invece che al modulo.

Punti di ingresso MCP utili

  • find_symbol

    Usalo per una funzione avanzata o una classe quando ti servono definizione e chiamanti.

  • dependency_search

    Usa l'attraversamento incoming su un cmdlet come `Restart-Service` per vedere quali script lo chiamano.

  • get_task_context

    Usalo per prompt come "traccia cosa fa `Deploy-Site` dall'inizio alla fine".