在應用程序中使用RunSpace 2

 

上一次的博客中我們介紹了最爲基本的方法在應用程序中使用PowerShell引擎,當然這是最爲簡單的使用方式雖然簡單當然也很有效,只不過不要忘記當不想再使用 RunspaceInvoke 實例的時候調用

實例的Dispose() 方法對其資源進行釋放,也許你也已經嘗試在你的應用程序中使用了這種方法

或許你也已經發現這中方法有一個巨大的問題 那就是通過簡單的代碼創建RunspaceInvoke 但是隻能同步執行並且獲取結果,也許這種方式在一般情況下並不是什麼大問題,在需要長時間的執行的腳本或者命令時候 Invoke()方法將會阻塞當前線程,使得你不得不進行長時間的等待,不得不說這點的確有點讓人不爽,我們之前說過選擇的簡單的辦法就要喪失其靈活性。

聰明的你似乎覺得我們今天的主題應該是異步運行了? 我不得不Say No 因爲在討論異步運行之前還有很多事情要做。

So 你就應該知道我們今天討論的主題是如何開始初步的使用Runspace 和PipeLine

一般來說 如果想在應用程序中使用PowerShell 引擎 我們只要創建Pipeline 就可以完成

但是現在我們還不能創建因爲這是依靠Runspace 實例的CreatePipeline() 方法創建

而現在我們都沒有創建Runspace 對象實例,Runspace 實例都要通過 RunspaceFactory 的靜態方法來創建並且在PowerShellV1 版本時候創的Runspace 實例都是Local Runspace 意味這你講不能創建基於遠程計算機會話的 Runspace 當然 V1版本已經太過久遠 我們已經無需思考這個問題

好了說了這麼多 下面我們應該看實際代碼

clip_image001

事實上代碼簡單到可以非常容易的理解

我們使用了無配置的靜態方法創建了新的Runspace 對象 當然這是使用默認配置

緊接着 我們創建了管道,並且是一個完整的管道 因爲我們給管道中放置了新的命令,

最後就像之前一樣我們使用Invoke執行了管道中的命令,

請注意創建管道前 Runspace 狀態要處於Opened 狀態 雖然此時依然可以創建管道但是系統會引發異常

clip_image002

同樣CreatePipeline 方法還有另外一個重載接受兩個參數

clip_image003

意思是當true 時候 命令將會記錄在命令歷史記錄中以方便使用Get-history 進行查找調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章