标题: [问题求助] 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- try
- {
- start "abc.exe"
- }
- catch
- {
- $_.Exception.Message
- }
复制代码
自己写的代码:- try
- {
- start "abc.exe"
- }
- catch
- {
- (($_ | Out-String) -split '\r\n' | Select-String '^at' | Out-String).trim()
- }
复制代码
作者: flashercs 时间: 2022-7-10 15:01
- try
- {
- start "abc.exe"
- }
- catch
- {
- ($_.InvocationInfo.PositionMessage -split '\r\n')[0]
- }
复制代码
作者: 小白龙 时间: 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 编辑
- $ErrorActionPreference = 'Stop'
- try{
- # comment
- copy 'abc' 'efdf'
-
- }catch{
- 'At line:{0} char:{1}' -f $_.InvocationInfo.ScriptLineNumber,$_.InvocationInfo.OffsetInLine
- }
复制代码
powershell的exception分为两类:termination error, non termination error.只有致命错误才能被catch 捕获.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |