You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于起始行拆分文本为多行扫描记录并保留起始行?

处理扫描记录拆分与解析问题

需求:将包含多条扫描记录的文本拆分为独立条目(每条以Root Scan Path开头,Suspicious Files结尾),再将每条记录解析为PSCustomObject。原拆分方法$String -Split "Root Scan Path: C:\"会丢失作为分隔符的开头行,需调整实现方式。

正确拆分扫描记录

使用正则正向前瞻实现拆分,保留每条记录的Root Scan Path开头行:

# 拆分文本为独立扫描记录,过滤空条目
$scanRecords = $String -Split '(?=Root Scan Path:)' | Where-Object { $_ -match '\S' }
  • 正则(?=Root Scan Path:)表示匹配**后面紧跟Root Scan Path:**的位置,拆分时不会消耗开头行内容
  • Where-Object { $_ -match '\S' }用于过滤拆分后产生的空字符串

将记录解析为PSCustomObject

遍历每条拆分后的记录,提取键值对并转换为自定义对象:

$scanObjects = foreach ($record in $scanRecords) {
    $props = @{}
    # 拆分单条记录为行,过滤空行
    $lines = $record -split "`n" | Where-Object { $_ -match '\S' }
    foreach ($line in $lines) {
        # 按第一个': '拆分键与值,保留值中的冒号(如果有)
        $key, $value = $line -split ': ', 2
        $props[$key] = $value
    }
    [PSCustomObject]$props
}
  • -split ': ', 2确保仅拆分第一个冒号加空格,避免值中包含冒号时出错
  • 自动处理空值(如示例中第二条记录的End Time)

验证结果

输出$scanObjects即可看到结构化的扫描记录:

$scanObjects

示例输出:

Root Scan Path : C:\
Scan ID        : 03307ad8-1a59-7d4e-8dfe-28864c9d1bc2
Status         : Completed
Initiated from : User
Start Time     : Monday, October 23, 2023 9:24:18 PM
End Time       : Monday, October 23, 2023 9:34:00 PM
Scanned Files  : 38311
Unsupported Files : 229479
Traversed Files   : 321202
Total Files       : 267790
Suspicious Files  : 0

Root Scan Path : C:\
Scan ID        : f32a64b0-56f5-664c-bf37-a7b120f759d8
Status         : Running
Initiated from : User
Start Time     : Tuesday, October 24, 2023 6:20:45 PM
End Time       :
Scanned Files  : 0
Unsupported Files : 0
Traversed Files   : 0
Total Files       : 0
Suspicious Files  : 0

内容的提问来源于stack exchange,提问作者xeric080

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:13:38