【发布时间】:2014-11-14 10:30:09
【问题描述】:
我使用 PAL 工具 (https://pal.codeplex.com/) 从 Windows 中的 perfmon 日志生成 HTML 报告。在 PAL 处理来自 perfmon 的 .blg 文件后,它会将信息转储到 HTML 文档中,该文档包含带有关于系统如何执行的各种数据点的表格。我目前正在编写一个脚本,该脚本查看所有 HTML 文件的目录内容,并对所有 HTML 文件执行获取内容。
我想做的是为具有不同行数的特定表刮取这个 get-content blob 的转储。是否可以使用本机 powershell cmdlet 来查找特定表,计算每个表中有多少行,并转储 just 所需的表和表行?
这是我尝试抓取的表格格式示例:
<H3>Overall Counter Instance Statistics</H3>
<TABLE ID="table6" BORDER=1 CELLPADDING=2>
<TR><TH><B>Condition</B></TH><TH><B>\LogicalDisk(*)\Disk Transfers/sec</B></TH><TH><B>Min</B></TH><TH><B>Avg</B></TH><TH><B>Max</B></TH><TH><B>Hourly Trend</B></TH><TH><B>Std Deviation</B></TH><TH><B>10% of Outliers Removed</B></TH><TH><B>20% of Outliers Removed</B></TH><TH><B>30% of Outliers Removed</B></TH></TR>
<TR><TD>No Thresholds</TD><TD>MACHINENAME/C:</TD><TD>1</TD><TD>7</TD><TD>310</TD><TD>0</TD><TD>11</TD><TD>5</TD><TD>5</TD><TD>5</TD></TR>
<TR><TD>No Thresholds</TD><TD>MACHINENAME/D:</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD></TR>
<TR><TD>No Thresholds</TD><TD>MACHINENAME/E:</TD><TD>0</TD><TD>24</TD><TD>164</TD><TD>-1</TD><TD>11</TD><TD>22</TD><TD>21</TD><TD>20</TD></TR>
<TR><TD>No Thresholds</TD><TD>MACHINENAME/HarddiskVolume5</TD><TD>0</TD><TD>0</TD><TD>2</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD></TR>
<TR><TD>No Thresholds</TD><TD>MACHINENAME/L:</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD><TD>0</TD></TR>
<TR><TD>No Thresholds</TD><TD>MACHINENAME/T:</TD><TD>0</TD><TD>7</TD><TD>430</TD><TD>0</TD><TD>21</TD><TD>3</TD><TD>2</TD><TD>2</TD></TR>
</TABLE>
所有输出文件的表 ID 是恒定的,但表行数不是。任何帮助表示赞赏!
【问题讨论】:
-
您需要表格中的特定行还是整个表格?
-
我需要整张桌子。我也不需要一张桌子。我将抓取几个表格并将信息汇总到一个 CSV 文件中,以便轻松导入 Excel。
-
你认为“本机命令”是什么? PS 没有任何可以解析 HTML 文件 的常用 cmdlet,但如果您安装了 IE,您可以通过
New-Object -ComObject InternetExplorer.Application进行 IE 自动化。然后你可以使用GetElementById .NET method获取表格。 -
您也许可以使用正则表达式找到开始的
<table id=标记,然后找到结束的</table>标记。转储正则表达式的结果。您要转储的所有表都将使用相同的ID="table6"吗? -
@Alexander:我认为“本机命令”是 powershell 中“开箱即用”的命令,无需导入任何第三方模块。最终,这是对一大堆结构化文本的解析练习,所以我想这将涉及一种在 blob 中定位所需表的方法,一个计算表中有多少行的循环,一种回显过滤后的方法结果。然后我将对结果运行 ConvertTo-CSV。
标签: html powershell csv cmdlets