[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 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. }
复制代码

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

TOP

回复 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'

TOP

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

回复 2# flashercs


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

try
{
        #start "abc.exe"
        copy 'abc' 'cde'
}
catch
{
        $_.InvocationInfo.PositionMessage
}

TOP

本帖最后由 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 捕获.
1

评分人数

微信:flashercs
QQ:49908356

TOP

返回列表