Siirry sisältöön
cd /languages
  • Windows-automaatio
  • Shell
  • AST- ja symbolituki

PowerShell-tuki Maguyva-palvelussa: koodigraafit skripteille ja moduuleille

Maguyva tukee PowerShell-kieltä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata funktioita, luokkia ja cmdlet-kutsuja skripteissä ja moduuleissa.

Missä PowerShell kampittaa pinnallisia tekoälytyökaluja

Omat funktiosi ja sisäänrakennetut cmdletit noudattavat samaa nimeämistyyliä. Get-Invoice ja Get-ChildItem näyttävät samalta, joten työkalu, joka karsii ”sisäänrakennetut” komennot verbin perusteella, heittää pois myös omat funktiosi. Skriptit sekoittavat lisäksi moduulitason koodia, funktioita, luokkia ja skriptilohkoja samaan tiedostoon, joten on vaikea nähdä, mihin funktioon jokin rivi kuuluu.

Maguyva säilyttää molemmat kutsutyypit ja liittää jokaisen kutsun funktioon, jossa se on.

Mitä Maguyva poimii PowerShell-koodista

Maguyva kattaa .ps1-, .psm1- ja .psd1-tiedostot. Funktiot ja luokkien metodit poimitaan kutsuttavina, ja luokat ja luettelotyypit tyyppeinä. Skriptien ja metodien parametreja seurataan, ja funktion sisäiset luvut ja kirjoitukset liitetään kyseiseen funktioon eikä moduuliin.

Cmdlet-kutsut jäävät graafiin. PowerShell ei käytä useimpien kielten standardikirjastosuodatinta, joten Write-Host, Get-ChildItem ja Restart-Service näkyvät kutsukaarina omien Get-*- ja Set-*-funktioidesi rinnalla. Agentti voi kysyä, mitkä skriptit käynnistävät palvelun uudelleen tai mitkä funktiot kirjoittavat konsoliin, ja saada rakenteeseen perustuvan vastauksen.

PowerShell-koodille yhtään suhdetyyppiä ei ole merkitty soveltumattomaksi, joten graafi tallentaa myös luokkaperinnän ja rajapintojen toteutukset, instanssien luonnit, ohjausvuon sekä luvut ja kirjoitukset.

Esimerkkikehotteita agenteille

  • ”Kuka kutsuu funktiota Invoke-Backup ja mistä ajastetuista skripteistä?” (find_symbol, sitten dependency_search incoming)
  • ”Mitkä funktiot kutsuvat cmdletiä Restart-Service?” (dependency_search)
  • ”Jäljitä, mitä Deploy-Site tekee alusta loppuun.” (get_task_context)

Tunnetut rajoitukset

  • Koska cmdlet-kutsut säilytetään, hyvin yleisillä cmdleteillä kuten Write-Host ja Select-Object on valtava määrä saapuvia kaaria. Aloita omasta funktiostasi, kun haluat rajatun kutsugraafin.
  • Import-Module ja dot-sourcing ovat tavallisia komentoja, joten structural_search-työkalun esiasetus imports ei valitse mitään. Käytä niiden listaamiseen text_pattern_search-työkalua.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Skriptiesi kutsumaa .NET-koodia varten lue C#-opas.

Parhaiten sopii

  • > Infrastruktuuri- ja ylläpitotiimit, joilla on suuria `.ps1`- ja `.psm1`-kokoelmia, joiden skriptit kutsuvat toistensa funktioita.
  • > Edistyneistä funktioista, luokista ja luettelotyypeistä rakennetut PowerShell-moduulit.
  • > Automaation ajokirjat, joissa agenttien on ennen muutosta nähtävä, mitkä skriptit koskevat palvelua, tiedostojakoa tai rekisteriavainta.

Agenttien työnkulut

  • > Löytää edistyneen funktion kaikki kutsujat ennen sen parametrien muuttamista.
  • > Listata skriptit, jotka kutsuvat cmdletiä kuten `Restart-Service`, ennen ajokirjan muuttamista.
  • > Kartoittaa ennen moduulin refaktorointia, mitkä funktiot kirjoittavat jaettuun muuttujaan.

Moottorin yksityiskohdat

  • > PowerShell-tuki kattaa `.ps1`-, `.psm1`- ja `.psd1`-tiedostot. Funktiot ja luokkien metodit ovat kutsuttavia, ja luokat ja luettelotyypit ovat tyyppejä.
  • > PowerShell-koodille standardikirjastosuodatin on pois päältä, joten cmdlet-kutsut kuten `Get-ChildItem` jäävät graafiin omien funktioidesi rinnalle.
  • > Funktion sisäiset luvut ja kirjoitukset liitetään kyseiseen funktioon eikä moduuliin.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä edistyneelle funktiolle tai luokalle, kun tarvitset määritelmän ja kutsujat.

  • dependency_search

    Käytä incoming-läpikäyntiä cmdletille kuten `Restart-Service` nähdäksesi, mitkä skriptit kutsuvat sitä.

  • get_task_context

    Käytä sitä kehotteisiin kuten ”jäljitä, mitä `Deploy-Site` tekee alusta loppuun”.