日志文件包含:
===== 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
一次只有一条线路。