powershell - 从看到多行的选择字符串中获取特定内容
问题描述
我正在运行一个选择字符串来查找我的一个日志中何时发生错误。当我运行命令时,我在之前拉 3 行,之后拉 0 行。
运行命令时,我得到了返回结果,但我不知道如何捕获结果的特定部分,因此我可以将其设置为仅通过电子邮件向我发送我需要的特定内容。
我正在使用的选择字符串是:
Select-String -Path \\testserver\d$\_Prod\product\Logs\App\product.log -Pattern 'Unable to authenticate/authorize user:' -Context 3,0
运行此命令后我得到的结果是:
\\testserver\d$\_Prod\product\Logs\App\product.log:24443:26 Jul 2019 09:57:52,238 INFO (com.product.vs.ws.policy.AuthenticationHandler:validate:55) - Done authenticating/authorizing user: adam
\\testserver\d$\_Prod\product\Logs\App\product.log:24444:26 Jul 2019 09:57:52,238 INFO (com.product.vs.ws.impl.ImportExportServiceImpl:importEmployeesWithAckByDS:529) - Importing multiple employees. Company/user: 1111222113
\\testserver\d$\_Prod\product\Logs\App\product.log:24445:26 Jul 2019 09:57:52,316ERROR (com.product.vs.ws.impl.ImportExportServiceImpl:importEmployeesWithAckByDS:538) - Unable to process request!
> \\testserver\d$\_Prod\product\Logs\App\product.log:24446:com.bsi.ef.exception.AuthenticationException: Unable to authenticate/authorize user: adam
我需要的部分是带有名称的模式和带有值的公司/用户。
我不确定如何获取模式和公司/名称的信息。只有当模式匹配时,我才需要这两个信息。如果我删除 -Context 3,0 它只会给我模式匹配,我也需要公司/名称。
来自日志的信息
26 Jul 2019 09:57:38,037 INFO (com.product.vs.ws.policy.AuthenticationHandler:validate:42) - Authenticating/authorizing user: adam
26 Jul 2019 09:57:38,037 INFO (com.product.vs.ws.policy.AuthenticationHandler:validate:55) - Done authenticating/authorizing user: adam
26 Jul 2019 09:57:38,037 INFO (com.product.vs.ws.impl.ImportExportServiceImpl:importEmployeesWithAckByDS:529) - Importing multiple employees. Company/user: 1111222113
26 Jul 2019 09:57:38,115ERROR (com.product.vs.ws.impl.ImportExportServiceImpl:importEmployeesWithAckByDS:538) - Unable to process request!
com.product.vs.exception.AuthenticationException: Unable to authenticate/authorize user: adam
at com.product.vs.ws.impl.ImportExportServiceImpl.importEmployeesWithAckByDS(ImportExportServiceImpl.java:531)`
^ Original post
我今天发现Unable to authenticate/authorize user
即使公司/用户未显示在日志中,我也需要它来返回结果。
今天日志中的信息
29 Jul 2019 10:25:25,181 INFO (com.product.vs.svc.ImpStgReqProcessCreator:run:68) - No records available in Staging Table for pick up...
29 Jul 2019 10:27:25,197 INFO (com.product.vs.svc.ImpStgReqProcessCreator:run:68) - No records available in Staging Table for pick up...
29 Jul 2019 10:28:30,725 INFO (com.product.vs.policy.AuthenticationHandler:validate:42) - Authenticating/authorizing user: Johnny
29 Jul 2019 10:28:30,725ERROR (com.product.vs.ws.policy.AuthenticationHandler:validate:50) - Unable to authenticate/authorize user: Johnny`
解决方案
- 您发布的
Select-String
输出只是返回的结构化MatchInfo
对象的默认表示。 - 由于该模式基于 RegEx,您可以使用更复杂的多行 RegEx
-或 -
分别评估 .context/.precontext 属性。
$Result = Select-String .\product.log -Pattern 'Unable to authenticate/authorize user:' -Context 3,0
$Result | Get-Member
$Result.Context | Get-Member
查看上述命令的输出,然后尝试
$Result = Select-String .\product.log -Pattern 'Unable to authenticate/authorize user: (.*)' -Context 3,0
$Result.Matches.Groups[1].Value
if (($Result.Context.PreContext -join '') -match 'Company/user: (\d+)'){$Matches[1]}
获取尾随名称的添加(捕获组)的内容和尾随公司编号的 $Matches 对象。
输出上述样本数据:
adam
111122211326
推荐阅读
- android - 如何在 Android 中将启动图像和文本居中在其下方?
- javascript - 重命名谷歌驱动器中的文件名
- c++ - c++ 编译器是否保护 const 内存地址不受任何更改?
- python - 在pycharm中导入模块
- npm - WP Rig:运行 npm run build 时出错:找不到“/vendor/bin/phpcs”
- draftjs - Draft.js:点击占位符开始输入
- python - 日期格式以及如何打印出现的最大数字和日期
- python - 我不能运行 seaborn
- c++ - 如何使用qt在给定时间在新窗口中显示视频帧
- python - 在 python 子进程中检测关闭的非阻塞 stdout/stderr 管道