【发布时间】:2019-09-03 14:15:12
【问题描述】:
日志文件包含:
===== SMTP_server_not_set_up @PANEL SMTP 服务器未设置。联系系统管理员。 @PAGECNT 381 @SCANADFCNT 0 @日期时间 2019-08-29T10:05:51-0400 @正常运行时间 0:00:23 @CODELVL 基础 MSNGM.053.023 发动机 GM.052.E015 面板 f0.12p48v3 @结尾 ===== 上电复位 @PAGECNT 381 @SCANADFCNT 0 @日期时间 2019-08-29T10:05:50-0400 @色情49 @CODELVL 基础 MSNGM.053.023 发动机 GM.052.E015 面板 f0.12p48v3 @结尾 ===== Load_MP_Feeder_with_Custom_Type_5_Letter @PANEL 使用自定义类型 5 字母加载 MP 进纸器 @PAGECNT 337 @SCANADFCNT 0 @日期时间 2019-08-29T09:59:22-0400 @正常运行时间 0:44:15 @CODELVL 基础 MSNGM.053.023 发动机 GM.052.E015 面板 f0.12p48v3 @结尾 =====...还有很多行
我想抓取 "=====" 行之后的 6 行并将其转换为自定义对象。
例如,根据第一行,理想的对象是:
消息:SMTP_server_not_set_up PANEL : @PANEL SMTP 服务器未设置。联系系统管理员。 PAGECNT:@PAGECNT 381 SCANADFCNT :@SCANADFCNT 0 日期时间:@DATETIME 2019-08-29T10:05:51-0400 正常运行时间:@正常运行时间 0:00:23到目前为止,我可以像这样隔离重复出现的“=====”后面的那 6 行:
(Select-String -Path "$PSScriptRoot\$($printer)_history.log" -Pattern "=====" -Context 6).Context.PostContext
现在我需要将这些行放入自定义对象中。我真的不知道如何正确处理这个问题,我正在探索做这样的事情:
$ObjHistory = @()
(Select-String -Path "$PSScriptRoot\$($printer)_history.log" -Pattern "=====" -Context 6).Context.PostContext | ForEach-Object {
if ($_ -match "PANEL") {
$properties = [ordered]@{'PANEL'="$_"}
$objet = New-Object -TypeName PSObject -Property $properties
}
$ObjHistory += $objet
}
$ObjHistory
这样我发现我可以成功地将 PANEL 属性放入自定义对象中,它会输出:
控制板 ----- @PANEL SMTP 服务器未设置。联系系统管理员。 @PANEL 使用自定义类型 5 字母加载 MP 进纸器 @PANEL 使用自定义类型 5 字母加载 MP 进纸器 @PANEL 使用自定义类型 5 字母加载 MP 进纸器 @PANEL 使用自定义类型 5 字母加载 MP 进纸器但是,我需要为其他行执行此操作,但我一直不知道如何处理它,因为 ForEach-Object 一次只执行一行。
【问题讨论】:
标签: powershell parsing pscustomobject