2012-10-17 18 views
6

我通過C#不必PowerShell和傳遞參數的問題如何通過C#參數傳遞給PowerShell的

我得到以下異常:

「的命令,提示用戶失敗,因爲主機程序或 命令類型不支持用戶交互嘗試支持用戶交互的主機程序 (如Windows PowerShell控制檯 或Windows PowerShell ISE),並從 命令類型中移除不支持用戶交互的與提示相關的命令,如Windows 個PowerShell的工作流程」

CS:

private static void RunPowershellScript(string scriptFile, string scriptParameters) 
{ 
    string scriptParameters = "param1 param2"; 

    RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); 
    Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); 
    runspace.Open(); 
    RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace); 
    Pipeline pipeline = runspace.CreatePipeline(); 
    Command scriptCommand = new Command(scriptFile); 
    Collection<CommandParameter> commandParameters = new Collection<CommandParameter>(); 
    foreach (string scriptParameter in scriptParameters.Split(' ')) 
    { 
     CommandParameter commandParm = new CommandParameter(null, scriptParameter); 
     commandParameters.Add(commandParm); 
     scriptCommand.Parameters.Add(commandParm); 
    } 
    pipeline.Commands.Add(scriptCommand); 
    Collection<PSObject> psObjects; 
    psObjects = pipeline.Invoke(); 
} 

PS:

Function Foo ($arg1, $arg2) 
{ 
    Write-Host $arg1 
    Write-Host $arg2 
} 
Foo $args[0] $args[1] 

缺少什麼我在這裏?我怎麼做這個工作?

回答

11

異常不是關於參數。要麼不要使用需要實現主機UI(包含Write-Host)或實施您自己的自定義主機(PSHost)和此UI(PSHostUserInterface)的命令。這裏是一個簡單的主機的例子(如果你選擇這種方式,MSDN上有很多關於此的例子): http://msdn.microsoft.com/en-us/library/windows/desktop/ee706559(v=vs.85).aspx

對於用UI實現主機的簡單任務可能太多了。您可以考慮簡單地使用相同的參數定義一個函數Write-Host並實施它,以便它適用於您的特定情況(例如[Console]::WriteLine(...))。這個功能應該在腳本中定義,或者以不同的方式提供給它,例如,調用在全局範圍中定義的另一個腳本。

P.S.如果你有你的自定義主機,然後使用CreateRunspace()重載之一,將主機實例作爲參數來鏈接主機和運行空間。

相關問題