从c#调用Powershell并处理异常
本文关键字:处理 异常 Powershell 调用 | 更新日期: 2023-09-27 18:12:29
我正在使用Process.Start()从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。