Ответ 1
Команды PowerShell имеют более богатый механизм ошибок, чем целые коды выхода. Существует поток ошибок, в котором появляются ошибки без завершения. Завершение ошибок приводит к появлению исключений, поэтому вам необходимо их обработать. Следующий код показывает, как использовать два механизма:
using System;
using System.Collections.ObjectModel;
using System.Management.Automation;
namespace PowerShellRunspaceErrors
{
class Program
{
private static PowerShell s_ps;
static void Main(string[] args)
{
s_ps = PowerShell.Create();
ExecuteScript(@"Get-ChildItem c:\xyzzy");
ExecuteScript("throw 'Oops, I did it again.'");
}
static void ExecuteScript(string script)
{
try
{
s_ps.AddScript(script);
Collection<PSObject> results = s_ps.Invoke();
Console.WriteLine("Output:");
foreach (var psObject in results)
{
Console.WriteLine(psObject);
}
Console.WriteLine("Non-terminating errors:");
foreach (ErrorRecord err in s_ps.Streams.Error)
{
Console.WriteLine(err.ToString());
}
}
catch (RuntimeException ex)
{
Console.WriteLine("Terminating error:");
Console.WriteLine(ex.Message);
}
}
}
}
Если вы запустите эту программу, она выведет:
Output:
Non-terminating errors:
Cannot find path 'C:\xyzzy' because it does not exist.
Terminating error:
Oops, I did it again.
Press any key to continue . . .