Cómo ver los enlaces dentro de su módulo PowerShell

Buen día, colegas. Hace cien años, en algún lugar, describí una forma rápida y sucia de ver un gráfico de llamadas dentro de su script de PowerShell. Ahora es el momento, por así decirlo, de tirar una lechuza en el globo y ver el gráfico de dependencia dentro del módulo.


En primer lugar, debe instalar el módulo PSQuickGraph desde la Galería Powershell. Y después de esto, ejecute el script, cuya base se puede tomar aquí . Honestamente, no entendía bien cómo insertar el código de GIST en una publicación en un centro Si alguien me dice en los comentarios, estaré muy agradecido.


Entonces, continuemos. En primer lugar, hablé sobre el módulo en dos. Está construido en la biblioteca QuickGraph . En esencia, este es un contenedor de PowerShell sobre la biblioteca, que está diseñado para pruebas rápidas y aproximadas con gráficos. Una de esas pruebas podría ser algo que analiza su código de PowerShell, genera un gráfico de enlace a partir de él y lo presenta visualmente.


Además, el script en sí utiliza el mecanismo de acceso incorporado de PowerShell a su AST, que, de hecho, simplifica enormemente nuestro análisis del código. Finalmente, combinando uno y otro obtenemos un gráfico.


Como resultado, el script en sí consta de dos partes. Una parte del "analizador" que funciona con el AST, y la parte que une el AST y el gráfico. Esta parte se describe en el siguiente ejemplo.


#    ( PSQuickGraph) $g = New-Graph -Type BidirectionalGraph #  PS1 ,  AST        $f = dir "C:\Repo\Work\Tools\*.ps1" -Recurse | Find-Function $f.name | % { Add-Vertex -Vertex $_ -Graph $g} #   ,    ,         ,      $f | % { $fName = $_.name $tmpFile = New-TemporaryFile $_.line >> ($tmpFile.fullname) $expr = Find-Expression -Fullname $tmpFile.fullname $expr.name | ? {$_} | ? {$_ -notin "%","where","?","select","out-null","sort","ft","fl","Write-Verbose" } | % { Add-Edge -From $fName -to $_ -Graph $g} } #   Show-GraphLayout -Graph $g #     DOT Export-Graph -Format Graphviz -Graph $g -Path C:\Temp\g.gv 

Bueno, algo como esto como resultado


moduleStructure


Además, el último comando exporta el gráfico al formato DOT, lo que le permite atormentarlo en la aplicación graphviz

Source: https://habr.com/ru/post/es425225/


All Articles