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

如何在PowerShell中从HP报告文本提取数据构建可查询数组?

从HP报告中提取指定字段并构建PowerShell可查询对象数组

我懂你这种头疼的情况——HP这份报告格式太紧凑,用简单的split()根本搞不定,毕竟字段之间的分隔不是统一的,一堆键值堆在一起。不过别担心,有几个实用的PowerShell方法能帮你轻松提取出Location和可用空间数据,还能直接做成可查询的对象数组,完全满足你的需求!

方法一:正则表达式精准匹配(推荐)

这种方法的核心是先把整个报告拆分成单个介质的信息块,再用正则精准提取每个块里的目标字段,灵活性极高,哪怕报告里字段顺序偶尔变动也能正常工作。

# 假设报告内容已存入$report变量(从文件读取的话:$report = Get-Content -Path "你的报告文件路径" -Raw)
$mediaBlocks = $report -split 'Medium identifier : ' | Select-Object -Skip 1

$result = foreach ($block in $mediaBlocks) {
    # 匹配Location字段,处理[TapeLibrary: 24]这类格式,只提取名称部分
    $locationMatch = [regex]::Match($block, 'Location : (.*?)(?=\sMedium Owner)')
    $location = $locationMatch.Groups[1].Value.Trim('[]').Split(':')[0].Trim()
    
    # 匹配Usable space [KB]的数值
    $usableSpaceMatch = [regex]::Match($block, 'Usable space \[KB\] : (\d+)')
    $usableSpace = [int]$usableSpaceMatch.Groups[1].Value

    # 生成自定义对象,方便后续查询
    [PSCustomObject]@{
        Location     = $location
        UsableSpace  = $usableSpace
    }
}

# 查看提取后的结果
$result

# 现在就可以像你想要的那样查询了
$result | Where-Object { $_.Location -eq "TapeLibrary" }

说明:

  • 先通过Medium identifier : 分割报告,把每个介质的信息单独拆成一个块;
  • 正则匹配时,针对Location的格式做了处理,把[TapeLibrary: 24]转换成TapeLibrary;
  • 把可用空间转成整数类型,后续还能做数值筛选(比如Where-Object { $_.UsableSpace -gt 0 })。

方法二:按行分组处理(适合字段顺序固定的场景)

如果你的报告里Location和Usable space的顺序永远是固定的,也可以用这种更简洁的方式:先过滤出目标字段的行,再每两行一组构建对象。

# 读取报告并过滤出只包含目标字段的行
$targetLines = $report -split '\r?\n' | Where-Object { $_ -match 'Location :|Usable space \[KB\] :' }

$result = for ($i=0; $i -lt $targetLines.Count; $i+=2) {
    # 提取Location值,处理括号格式
    $location = $targetLines[$i] -replace 'Location : ', '' -replace '\[(.*?):.*?\]', '$1' -trim()
    # 提取可用空间并转成整数
    $usableSpace = [int]($targetLines[$i+1] -replace 'Usable space \[KB\] : ', '')
    
    [PSCustomObject]@{
        Location    = $location
        UsableSpace = $usableSpace
    }
}

# 查看结果
$result

额外建议

用PSCustomObject生成的对象,除了支持Where-Object查询,还能做很多操作:

  • 排序:$result | Sort-Object UsableSpace -Descending
  • 导出成CSV文件:$result | Export-Csv -Path "介质可用空间统计.csv" -NoTypeInformation
  • 如果后续需要提取其他字段,只需要在正则或过滤规则里添加对应的字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:08:05