[英]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.