Board logo

标题: [问题求助] PowerShell怎样只取异常消息中的at开头的那行? [打印本页]

作者: 小白龙    时间: 2022-7-10 13:43     标题: PowerShell怎样只取异常消息中的at开头的那行?

各位大佬, 下面代码可以显示所有的异常错误信息,
但是我只想显示其中的at开头的那些行(可能会有多个at开头的情况),同时把路径删除掉
自己写了代码, 能取到at开头行, 但是感觉应该有更简单的方法, 求指点
例如取到下面错误信息后:
At C:\Users\Administrator\Desktop\AA.ps1:5 char:2
再删除路径,最终需要显示如下的字符
At 5 char:2
  1. try
  2. {
  3. start "abc.exe"
  4. }
  5. catch
  6. {
  7. $_.Exception.Message
  8. }
复制代码
自己写的代码:
  1. try
  2. {
  3. start "abc.exe"
  4. }
  5. catch
  6. {
  7. (($_ | Out-String) -split '\r\n' | Select-String '^at' | Out-String).trim()
  8. }
复制代码

作者: flashercs    时间: 2022-7-10 15:01

  1. try
  2. {
  3. start "abc.exe"
  4. }
  5. catch
  6. {
  7. ($_.InvocationInfo.PositionMessage -split '\r\n')[0]
  8. }
复制代码

作者: 小白龙    时间: 2022-7-10 17:16

回复 2# flashercs


    多谢大佬,

At C:\Users\Administrator\Desktop\AA.ps1:5 char:2
把上面的路径删除,最终需要显示如下的字符
At 5 char:2
我写了下面的代码, 但是不能生效
($_.InvocationInfo.PositionMessage -split '\r\n')[0] -replace 'At.+:.+:','At'
作者: 小白龙    时间: 2022-7-10 17:24

本帖最后由 小白龙 于 2022-7-10 17:26 编辑

回复 2# flashercs


   还发现一个问题, 换了一个命令, 就不能输出位置信息了,  有办法在所有情况下, 只显示错误的位置信息吗?

try
{
        #start "abc.exe"
        copy 'abc' 'cde'
}
catch
{
        $_.InvocationInfo.PositionMessage
}
作者: flashercs    时间: 2022-7-10 17:56

本帖最后由 flashercs 于 2022-7-10 18:04 编辑
  1. $ErrorActionPreference = 'Stop'
  2. try{
  3. # comment
  4. copy 'abc' 'efdf'
  5. }catch{
  6. 'At line:{0} char:{1}' -f $_.InvocationInfo.ScriptLineNumber,$_.InvocationInfo.OffsetInLine
  7. }
复制代码
powershell的exception分为两类:termination error, non termination error.只有致命错误才能被catch 捕获.




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2