从c#调用Powershell并处理异常

本文关键字:处理 异常 Powershell 调用 | 更新日期: 2023-09-27 18:12:29

我正在使用Process.Start()从c#调用Powershell脚本。我如何捕获由c#代码中的Powershell脚本引发的异常?

从c#调用Powershell并处理异常

在c#中托管PowerShell引擎非常简单。这段代码使用了有点过时的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();
}

抱歉,我不知道如何评论Keith的回答。

您不需要先检查if (pipeline.error.Count > 0)然后再使用pipeline.error.Read()吗?

我一直相信你的try/catch不会处理在运行空间级别发生的任何错误。

如果你想与powershell交互,你不应该使用process。