我試圖在我的應用程序中添加一些非常有限的PowerShell支持:我要定期運行一個用戶自定義的PowerShell腳本,並顯示任何輸出能力,(最終)能夠處理進度通知和用戶提示請求。 I 不需要需要命令行式的交互式支持,或(我認爲)遠程訪問或運行多個併發腳本的能力,除非用戶腳本在我託管的shell內自行完成。我最終想要異步運行腳本或在後臺線程上運行腳本,並且可能會使用一些初始變量和或 cmdlet對shell進行種子,但這種功能很可能會「花哨」。主機的PowerShell:PowerShell中與運行空間與RunspacePool與管道
我一直在閱讀MSDN documentation about writing host application code,但是當它高興地介紹如何創建PowerShell
對象,或Runspace
,或RunspacePool
,或者Pipeline
,沒有跡象顯示有關爲什麼人會在選擇任何一種方法的另一個。
我認爲我到這兩個中的一個,但我喜歡一些反饋,哪些方法是一個更好的採取:
PowerShell shell = PowerShell.Create();
shell.AddCommand(/* set initial state here? */);
shell.AddStatement();
shell.AddScript(myScript);
shell.Invoke(/* can set host! */);
或:
Runspace runspace = RunspaceFactory.CreateRunspace(/* can set host and initial state! */);
PowerShell shell = PowerShell.Create();
shell.Runspace = runspace;
shell.AddScript(myScript);
shell.Invoke(/* can set host here, too! */);
(其中一個需要PSHost
派生類的方法是EnterNestedPrompt()
,我不知道用戶定義的腳本我運行是否會導致該到被調用或沒有。如果能的話,我會負責「出發一個新的嵌套輸入廁所P」(as per here)......如果可以影響其路徑上面走,這也將是很好的瞭解。)
謝謝!
你實際上並不需要一個主機。只要確保避免寫入主機,讀取主機等的調用。有一種方法來檢查PS是否有主機連接,但我現在不記得它。 – 2013-05-02 09:14:40
我可能並不需要一個PSHost,但是在我的例子中,我想要一個...我期待用戶定義的腳本有偶爾的診斷信息,我希望能夠顯示。 (我會編輯原始文章以使其更清楚。) – JaredReisinger 2013-05-02 17:45:39