2010-03-10 35 views
0

我已經完成了一些託管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來保持狀態嗎?

回答

0

這實際上是模塊的目錄有尾隨「\」的問題。

導入模塊-Name「D:\ aaa \ Modules \ Xyd \」無效。