繁体   English   中英

Runspace PowerShell输出

[英]Runspace PowerShell output

我有powershell脚本文件,它可以执行某些操作并输出结果。 如果使用cmd在远程主机上手动运行它,则将获得清晰的输出。

但是,当我尝试使用c#通过PowerShell Runspace执行脚本时,看不到脚本的输出。 仅命令本身。

using (PowerShell powershell = PowerShell.Create())
{
  try
  {
    PowerShell ps = PowerShell.Create();
    ps.AddScript("c:\temp\myps.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:\temp\myps.ps1"

如何访问C#的输出?

请参阅有关PowerShell类的此文档: https : //msdn.microsoft.com/zh-cn/library/system.management.automation.powershell(v=vs.85).aspx

看来您需要访问PSObject的成员才能获取输出。 否则,它将仅将Laim ToString()数据发送到StringBuilder对象。 你有什么例子可以证明你回来了吗? 我也许可以通过样本提供更好的答案。 另外,远程运行空间在哪里?

谢谢!

下一个对我有用的代码:

try
  {
    PowerShell ps = PowerShell.Create().AddScript("c:\temp\myps.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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM