如何通过自动化运行PowerShell脚本而不会遇到Host问题

时间:2010-04-16 23:31:04

标签: powershell automation hosting powershell-v2.0

我希望通过自动化运行一些PowerShell脚本。类似的东西:

IList errors;
Collection<PSObject> res = null;
using (RunspaceInvoke rsi = new RunspaceInvoke())
{
    try
    {
        res = rsi.Invoke(commandline, null, out errors);
    }
    catch (Exception ex)
    {
        LastErrorMessage = ex.ToString();
        Debug.WriteLine(LastErrorMessage);
        return 1;
    }
}

我面临的问题是,如果我的脚本使用write-host之类的cmdlet,则上面会抛出System.Management.Automation.CmdletInvocationException -

  

无法调用此函数,因为   当前主机没有实现   它

解决此问题的有哪些好方法?

1 个答案:

答案 0 :(得分:11)

一种选择是创建一个写主机函数并将其注入您的运行空间。该函数将优先于具有相同名称的cmdlet。在此函数中,如果您的应用程序是控制台应用程序,或者如果您的应用程序是GUI应用程序,则无法执行任何操作或者可能使用[console] :: writeline(),将一些对象注入到PowerShell会话中,该函数可以编写输出to(查看Runspace.SessionStateProxy.SetVariable)。

另一个(有点复杂)选项是实现PowerShell hosting interfaces in your app