运行空间PowerShell输出



我有一个powershell脚本文件,它做一些事情并输出结果。如果我在远程主机上使用cmd手动运行它,我将得到清晰的输出。

但是当我试图使用c#通过PowerShell Runspace执行脚本时,我无法看到脚本的输出。只有命令本身。

using (PowerShell powershell = PowerShell.Create())
{
  try
  {
    PowerShell ps = PowerShell.Create();
    ps.AddScript("c:tempmyps.ps1");
    ICollection<PSObject> results = ps.Invoke();
    using (StringWriter sw = new StringWriter())
    {
      foreach (PSObject invoke in results)
        sw.WriteLine(invoke.ToString());
      outp = sw.ToString();
    }
    //Script errors
    if (ps.Streams.Error.Count > 0)
    {
      outp += Environment.NewLine + string.Format("{0} errors: ", ps.Streams.Error.Count);
      foreach (ErrorRecord err in ps.Streams.Error)
        outp += Environment.NewLine + err.ToString();
    }
  }
  catch (Exception e)
  {
    // Terminating errors
    outp = "Critical error: " + e.Message;
  }
}
remoteRunspace.Close();
//In the end outp for me = "c:tempmyps.ps1"

如何访问c#的输出?

查看有关PowerShell类的文档:https://msdn.microsoft.com/en-us/library/system.management.automation.powershell(v=vs.85).aspx

看起来需要访问PSObject的成员才能获得输出。否则,它只会将断言ToString()数据发送给StringBuilder对象。你有什么可以展示的例子吗?我也许能提供一个更好的答案与样品。另外,远程运行空间位于哪里?

谢谢!

下一个为我工作的代码:

try
  {
    PowerShell ps = PowerShell.Create().AddScript("c:tempmyps.ps1", true);
    ps.Runspace = remoteRunspace;
    ICollection<PSObject> results = ps.Invoke();
    using (StringWriter sw = new StringWriter())
    {
      foreach (PSObject invoke in results)
        sw.WriteLine(invoke.ToString());
      outp = sw.ToString();
    }
    //Script errors
    if (ps.Streams.Error.Count > 0)
    {
      outp += Environment.NewLine + string.Format("{0} errors: ", ps.Streams.Error.Count);
      foreach (ErrorRecord err in ps.Streams.Error)
        outp += Environment.NewLine + err.ToString();
    }
  }
  catch (Exception e)
  {
    // Terminating errors
    outp = "Critical error: " + e.Message;
  }
}
remoteRunspace.Close();

最新更新