Bom dia, colegas. Cem anos atrás, em algum lugar, descrevi uma maneira rápida e suja de ver um gráfico de chamada dentro do seu script do PowerShell. Agora, é hora de, por assim dizer, puxar uma coruja para o globo e ver o gráfico de dependência dentro do módulo.
Primeiro de tudo, você precisa instalar o módulo PSQuickGraph da Powershell Gallery. E depois disso, execute o script, cuja base pode ser acessada aqui . Honestamente, eu não entendi direito como inserir o código do gist em uma postagem em um hub Se alguém me disser nos comentários, ficarei muito agradecido.
Então, vamos continuar. Primeiro de tudo, eu falei sobre o módulo em dois. Ele é construído na biblioteca do QuickGraph . Em essência, este é um invólucro do PowerShell sobre a biblioteca, projetado para testes rápidos e aproximados com gráficos. Um desses testes pode ser algo que analisa seu código do PowerShell, gera um gráfico de links e o apresenta visualmente.
Além disso, o próprio script usa o mecanismo de acesso interno do PowerShell ao seu AST, o que, de fato, simplifica bastante nossa análise do código. Por fim, combinando um e outro, obtemos um gráfico.
Como resultado, o próprio script consiste em duas partes. Uma parte do "analisador" que funciona com o AST e a parte que vincula o AST e o gráfico. Esta parte é descrita no exemplo a seguir.
# ( 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
Bem, algo assim como resultado

Além disso, o último comando exporta o gráfico para o formato DOT, o que permite atormentá-lo no aplicativo graphviz