C# 运行空间PowerShell输出
我有一个powershell脚本文件,它执行一些操作并输出结果。如果我使用cmd在远程主机上手动运行它,我将得到清晰的输出 但当我试图使用c#通过PowerShell运行空间执行脚本时,我无法看到脚本的输出。只有命令自己C# 运行空间PowerShell输出,c#,powershell,C#,Powershell,我有一个powershell脚本文件,它执行一些操作并输出结果。如果我使用cmd在远程主机上手动运行它,我将得到清晰的输出 但当我试图使用c#通过PowerShell运行空间执行脚本时,我无法看到脚本的输出。只有命令自己 using (PowerShell powershell = PowerShell.Create()) { try { PowerShell ps = PowerShell.Create(); ps.AddScript("c:\temp\myps.ps1
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"
使用(PowerShell PowerShell=PowerShell.Create())
{
尝试
{
PowerShell ps=PowerShell.Create();
ps.AddScript(“c:\temp\myps.ps1”);
ICollection results=ps.Invoke();
使用(StringWriter sw=new StringWriter())
{
foreach(结果中的PSObject调用)
sw.WriteLine(invoke.ToString());
outp=sw.ToString();
}
//脚本错误
如果(ps.Streams.Error.Count>0)
{
outp+=Environment.NewLine+string.Format(“{0}错误:”,ps.Streams.Error.Count);
foreach(在ps.Streams.Error中记录错误)
outp+=Environment.NewLine+err.ToString();
}
}
捕获(例外e)
{
//终止错误
outp=“严重错误:”+e.消息;
}
}
remoteRunspace.Close();
//在结束时为我输出=“c:\temp\myps.ps1”
如何从C#访问输出?请参阅有关PowerShell类的文档: 看起来您需要访问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();
试试看
{
PowerShell ps=PowerShell.Create().AddScript(“c:\temp\myps.ps1”,true);
ps.运行空间=远程运行空间;
ICollection results=ps.Invoke();
使用(StringWriter sw=new StringWriter())
{
foreach(结果中的PSObject调用)
sw.WriteLine(invoke.ToString());
outp=sw.ToString();
}
//脚本错误
如果(ps.Streams.Error.Count>0)
{
outp+=Environment.NewLine+string.Format(“{0}错误:”,ps.Streams.Error.Count);
foreach(在ps.Streams.Error中记录错误)
outp+=Environment.NewLine+err.ToString();
}
}
捕获(例外e)
{
//终止错误
outp=“严重错误:”+e.消息;
}
}
remoteRunspace.Close();
您好,远程运行空间这是指定网络中的另一台计算机。我想得到完整的输入。即,与我在cmd.Gotcha中手动启动PS命令时看到的相同。尝试一下本文-它已经有了一个代码示例: