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

我希望通过自动化运行一些Power Shell脚本.就像是:

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;
    }
}

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

Cannot invoke this function because
the current host does not implement
it.

有什么好方法可以解决这个问题?

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

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

相关文章
相关标签/搜索