7

我希望通过自动化运行一些 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-

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

有什么好的选择可以解决这个问题?

4

1 回答 1

11

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

另一个(稍微复杂一点)选项是在您的应用程序中实现 PowerShell 托管接口

于 2010-04-17T00:35:21.203 回答