2014-01-22 60 views
1

我試圖從另一個自定義cmdlet運行自定義PowerShell cmdlet。奇怪的是,我可以從Windows Powershell手動運行我的自定義cmdlet,它可以工作,但是當我嘗試觸發相同的自定義cmdlet時,它會失敗。從另一個自定義cmdlet運行許多自定義C#PowerShell cmdlet

Powershell

運行演示代碼:

它基本上是這樣的運行演示: 我知道它缺少的參數,但「從來沒有少」,應該找到在PowerShell中的cmdlet。

   Command cmd = new Command("Run-ContentInventory"); 
       Runspace runSpace = RunspaceFactory.CreateRunspace(); 
       runSpace.Open(); 
       Pipeline pipeline = runSpace.CreatePipeline(); 
       pipeline.Commands.Add(cmd); 
       Collection<PSObject> output; 
       output = pipeline.Invoke(); 
       foreach (PSObject psObject in output) 
       { 
        Console.WriteLine(psObject); 
       } 

感謝您的幫助!

+0

你能發佈「Run-Demo」的代碼嗎? – Trondh

+0

你不需要先導入它嗎? –

+0

如果您從Visual-Studio部署cmdlet,它將導入。但我也嘗試導入(-module)在構建解決方案時手動創建的dll。同樣的結果。 – Bjorn

回答

2

問題的核心是你正在創建一個新的運行空間,它不會加載你的cmdlet。這是你應該避免的,因爲它消耗了大量的內存,並在嘗試同步兩個運行空間時產生了很多問題。

訣竅是使用管道。聲明型管道的私人領域,那麼,在你的BeginProcessing,添加:

pipeline = Runspace.DefaultRunspace.CreateNestedPipeline(); 

請丟入EndProcessing嵌套管道。

在進程記錄中,您的代碼應該保持幾乎相同。

相關問題