有一個讓我非常喜歡Windows PowerShell ISE的理由,就是它將它的基礎腳本對象模型暴露給用戶,這樣就允許用戶按照自己的方式和需要去自定義腳本體驗。
自定義ISE的核心是$psISE對象。$psISE對象允許用戶去控制ISE許多方面的功能。你可以從這里獲取關于$psISE的分層對象模型的介紹,和與這些對象相關聯的功能。
這篇文章會討論你怎樣利用PowerShell公開提供的解釋器接口,來結合ISE對象模型魅力,去創建腳本分析和快速定位的工具。
想象一下,你不得不分析一個相對龐大的PowerShell腳本。那這個腳本可能是別人寫的,也有可能是你自己幾個月前寫的,扔了好久了。PowerShell ISE已經做了件非常棒的工作了,它提供了腳本環境。你可以通過添加Add-On(附加工具)來擴充它的功能,讓你的腳本體驗更好,更高效。從PowerShell 3.0開始,腳本的抽象語法樹(AST)就可以使用語法解釋器接口非常方便的獲取了。下面的腳本行會獲取當前打開的ISE中的腳本的AST:
接下來讓我們查詢腳本中所有的函數:
撇開函數定位的定義,如果我們能回到光標之前出現的位置,那將太漂亮了。實現這個也非常簡單。我們所要做的只是存儲這些行號,然后按照反轉順序反轉他們。(是否有人已經知道了,“堆棧”)
下面的腳本塊展示了展示了Go-To Definition的實現。