代码之家  ›  专栏  ›  技术社区  ›  Scott Weinstein

如何通过自动化运行powershell脚本而不遇到主机问题

  •  7
  • Scott Weinstein  · 技术社区  · 14 年前

    我想通过自动化运行一些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 上面抛出一个 System.Management.Automation.CmdletInvocationException -

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

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

    1 回复  |  直到 14 年前
        1
  •  11
  •   Keith Hill    14 年前

    一个选项是创建一个写宿主函数并将其注入到您的运行空间中。此函数将优先于同名的cmdlet。在这个函数中,如果您的应用程序是控制台应用程序,或者如果您的应用程序是gui应用程序,您可以不做任何事情,也可以使用[console]::writeline(),将一些对象插入到powershell会话中,该函数可以将输出写入其中(请查看runspace.sessionstateproxy.setvariable)。

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

    推荐文章