2014-09-04 66 views
0

我需要打印一些例外到屏幕/登录文件。让最后一个例外从最后一个powershell执行

有没有办法让所有由上次脚本执行导致的异常? 认为这是一个例子:

  • 我打开PowerShell窗口
  • 我exceute abc.ps1,它会抛出一些错误。
  • 我现在执行xyz.ps1,它引发多个异常。现在我只想记录来自xyz.ps1的所有异常。

如果我使用$error[0],我只得到最后一个例外。我还需要xyz.ps1抛出的其他异常

+0

您应该考虑改为使用try/catch执行正确的错误处理 – 2014-09-04 10:35:20

+0

Noah说,如果您需要捕捉脚本中的特定错误,请使用try catch获取并记录它们。 – 2014-09-04 15:29:55

+0

Noah and Dane我明白最好的方法是在try catch块中捕获特定的异常,但问题是我们有很多powershell,并且已经写好了,所以我只是想以上述方式登录。捕获包装器powershell脚本(和底层cmdlet,脚本)产生的所有异常并将它们记录在文件中。 – 2014-09-04 17:17:29

回答

0

我想我已经想出了这样做的方法。如果使用Get-Member cmdlet($error[0] | Get-Member)检查$ error [0]的属性,则应该注意到名为ScriptStackTrace的属性。该属性告诉我们错误是从脚本还是从控制台引发的。用下面的代码,我设法实现你问什么:

for ($i=0;$i -lt $error.Count; $i++) 
{ if ($Error[$i].ScriptStackTrace -match "xyz.ps1") 
{ $error[$i] | out-file -Append "ErrorsScriptXYZ.txt" } } 

如果您打算使用脚本可调用的方式,将其添加为执行的最后一行。请注意,它不会捕获脚本运行之前可能发生的终止错误。探索Get-Member cmdlet以获取更多想要操作的属性。请注意,这只会搜索当前变量会话中的错误,因为下次启动时错误消失了。