我已經完成了一些託管PowerShell的工作,並做了大量的閱讀,但我看到了奇怪的行爲,這讓我懷疑我是否像我以前那樣理解主機。瞭解PowerShell託管
我創建一個運行空間與RunspaceFactory:
var runSpace = RunspaceFactory.CreateRunspace()
我利用我的整個主機的執行相同的運行空間。當我第一次啓動主機時,我調用導入模塊命令:
var pipeline = runSpace.CreatePipeline();
var psCommand = new Command("Import-Module");
psCommand.Parameters.Add("Name", directory + "MyModule");
pipeline.Commands.Add(psCommand);
pipeline.Invoke();
「directory」是一個不是默認模塊目錄的目錄。我可以在PowerShell命令窗口中使用相同的import-module命令和完全相同的語法,並且工作正常。該命令似乎在我的自定義主機中成功完成。後來在執行我嘗試調用模塊內的cmdlet:
var pipeline = runSpace.CreatePipeline();
var psCommand = new Command("Get-Stuff");
pipeline.Commands.Add(psCommand);
var stuff = pipeline.Invoke();
但在調用我得到的例外是「GET-東西」是不是cmdlet..etc。
我的理解是一個Runspace會保持這種狀態。這不是這種情況嗎?我在另一個項目中成功創建了一個主機。主要區別在於該主機正在使用默認模塊目錄(Documents \ Modules \),並且我調用CreateRunspace()方法,如下所示:
var runspace = Runspace.CreateRunspace(customHost);
我必須定義一個PSHost來保持狀態嗎?