يوم جيد ، زملائي. قبل مائة عام ، في مكان ما ، وصفت طريقة سريعة وقذرة لرؤية رسم بياني للمكالمات داخل برنامج PowerShell النصي الخاص بك. حان الوقت الآن ، إذا جاز التعبير ، لسحب بومة على الكرة الأرضية ورؤية الرسم البياني للتبعية داخل الوحدة.
بادئ ذي بدء ، تحتاج إلى تثبيت وحدة PSQuickGraph من معرض Powershell. وبعد ذلك ، قم بتشغيل البرنامج النصي ، والتي يمكن أخذ أساسها هنا . بصراحة ، لم أكن أفهم تمامًا كيفية إدراج الرمز من الجوهر في مشاركة على مركز إذا أخبرني أحدهم في التعليقات ، سأكون ممتنًا جدًا.
لذا ، دعنا نواصل. بادئ ذي بدء ، تحدثت عن الوحدة في قسمين. وهي مبنية على مكتبة QuickGraph . في الأساس ، هذا هو غلاف PowerShell فوق المكتبة ، وهو مصمم للاختبارات السريعة والخشبية مع الرسوم البيانية. يمكن أن يكون أحد هذه الاختبارات شيئًا يوزع رمز PowerShell الخاص بك ، وينشئ رسمًا بيانيًا للارتباط منه ، ويعرضه بشكل مرئي.
بالإضافة إلى ذلك ، يستخدم البرنامج النصي نفسه آلية الوصول PowerShell المضمنة إلى AST الخاص به ، والذي ، في الواقع ، يبسط إلى حد كبير تحليلنا للكود. في النهاية ، من خلال الجمع بين أحدهما والآخر نحصل على رسم بياني.
نتيجة لذلك ، يتكون النص نفسه من جزأين. قطعة من المحلل اللغوي التي تعمل مع AST ، والجزء الذي يربط بين AST والرسم البياني. يتم وصف هذا الجزء في المثال التالي.
# ( 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
حسنا ، شيء من هذا القبيل نتيجة لذلك

بالإضافة إلى ذلك ، يقوم الأمر الأخير بتصدير الرسم البياني إلى تنسيق DOT ، مما يسمح لك بتعذيبه في تطبيق graphviz