2015-09-09 91 views
0

我有一個單獨的測試項目來測試我的cmdlet的項目,有一個像電話用戶輸入自定義的PowerShell命令:如何給從另一個項目

pSCmdletObject.InvokeCommand.InvokeScript("Write-Host " + outputString); and 
pSCmdletObject.InvokeCommand.InvokeScript("Read-Host"); 

我已經使用了PSHostUserInterface,PSRawUserInterface,PSHost實施例子給出在C:\ Program Files文件(x86)的\微軟的SDK \的Windows \ V7.0 \樣本\ SYSMGMT \ WindowsPowerShell \ CSHARP \ Host03

這裏的問題是:

TestClass.cs(測試項目) :

using (Runspace runSpace = RunspaceFactory.CreateRunspace(new Host(new TestClass()))) 
{ 
    runSpace.Open(); 

    using (Pipeline pipeline = runSpace.CreatePipeline()) 
    { 
     pipeline.Commands.Add("CustomCommand-Get"); 
     var output = pipeline.Invoke(); //<<< (1) 
    } 
} 

在「(1)」調用「Invoke」時,調用寫在實際項目中的「CustomCommand」實現。在實際cmdlet項目的「CustomCommand」的「ProcessRecord()」中,當調用「Read-Host」時,該項目只是等待我目前無法提供的輸入,因爲我無法找到某種方式。我的測試項目有Invoke調用,我想避免使用控制檯。我想根據測試用例以某種方式對輸入進行硬編碼,因爲實際的自定義Cmdlet項目是一個完全不同的項目,可以獨立運行。這可以做到嗎?如果是這樣,怎麼樣?任何其他方式來實現這一目標?

在此先感謝

回答

0

如果你有一個自定義的主機實現,那麼你可以修改主機IMPL創建一個測試主機實現了一套,你可以有PSHostUserInterface.Prompt()PSHostUserInterface.ReadLine()任何你想要的時候被稱爲這些方法回報。這些方法(加上PSHostUserInterface.ReadLineAsSecureString())由Read-Host調用以從主機(最終用戶)讀取字符串。

+0

謝謝,它的工作原理! – user3575135

相關問題