Вызов Powershell из C # и обработка исключений - PullRequest
1 голос
/ 27 октября 2011

Я вызываю скрипты Powershell из C #, используя Process.Start (). Как перехватить исключения, которые вызываются скриптом Powershell в коде C #?

Ответы [ 3 ]

5 голосов
/ 27 октября 2011

Размещение движка PowerShell в C # довольно просто. Этот код использует немного устаревший API, но он все еще работает и дает вам представление о том, что задействовано:

string cmd = @"Get-ChildItem $home\Documents -recurse | " +
              "Where {!$_.PSIsContainer -and ($_.LastWriteTime -gt (Get-Date).AddDays(-7))} | " +
              "Sort Fullname | Foreach {$_.Fullname}";

Runspace runspace = null;
Pipeline pipeline = null;

try
{
    runspace = RunspaceFactory.CreateRunspace();
    runspace.Open();
    pipeline = runspace.CreatePipeline();
    pipeline.Commands.AddScript(cmd);
    Collection<PSObject> results = pipeline.Invoke();
    foreach (PSObject obj in results)
    {
        // Consume the results
        Debug.WriteLine(obj);    
    }
}
catch (Exception ex)
{
    Debug.WriteLine(ex);
}
finally
{
    if (pipeline != null) pipeline.Dispose();
    if (runspace != null) runspace.Dispose();
}
3 голосов
/ 20 марта 2012

Извинения, я не могу понять, как комментировать ответ Кейта.

Вам не нужно проверять if (pipeline.error.Count > 0), а затем использовать pipeline.error.Read()?

I 'Мы верили, что пробная версия не обрабатывает ошибки, возникающие на уровне пространства выполнения.

2 голосов
/ 27 октября 2011

Если вы хотите взаимодействовать с powershell, вам не следует использовать process.start, вместо этого host powershell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...