如何用PowerShell从HTML表格提取指定信息(如序列号)
解决方案
1. 精准定位表头提取目标序列号
通过IE DOM的节点遍历能力,先锁定包含“Serial Number”的表头单元格,再定位其对应的数值单元格,从根源避免正则误匹配:
# 等待IE完全加载文档,防止DOM未就绪 while ($oIE.Busy -or $oIE.ReadyState -ne 4) { Start-Sleep -Milliseconds 500 } # 遍历所有表格 foreach ($table in $sourceHTML.getElementsByTagName('table')) { # 遍历表格每一行 foreach ($row in $table.getElementsByTagName('tr')) { $cells = $row.getElementsByTagName('td') # 检查当前行是否为"Serial Number"键值行 if ($cells.Count -ge 2 -and $cells[0].innerText.Trim() -eq "Serial Number") { $serialCandidate = $cells[1].innerText.Trim() # 二次验证是否为8开头的7位数字 if ($serialCandidate -match '^8\d{6}$') { Write-Host "匹配到目标序列号: $serialCandidate" # 可将结果存入数组或哈希表后续使用 } } } }
2. 批量提取其他表格字段
如果其他表格也是“键-值”结构,复用上述逻辑即可,只需修改目标字段列表:
# 定义需要提取的字段集合 $targetFields = @("Serial Number", "Device Model", "Manufacturer", "Purchase Date") # 用哈希表存储最终结果 $result = @{} foreach ($table in $sourceHTML.getElementsByTagName('table')) { foreach ($row in $table.getElementsByTagName('tr')) { $cells = $row.getElementsByTagName('td') if ($cells.Count -ge 2) { $fieldName = $cells[0].innerText.Trim() if ($targetFields -contains $fieldName) { $result[$fieldName] = $cells[1].innerText.Trim() } } } } # 输出所有提取结果 $result
3. 替代方案:脱离IE COM依赖
如果不想用IE COM对象,可使用HTML Agility Pack处理本地HTML,更高效稳定:
# 首次使用需安装模块(管理员权限执行) # Install-Module -Name HtmlAgilityPack $htmlDoc = New-Object HtmlAgilityPack.HtmlDocument $htmlDoc.Load("C:\Temp\Record.htm") # 提取序列号 $serialNode = $htmlDoc.DocumentNode.SelectSingleNode("//td[text()='Serial Number']/following-sibling::td[1]") if ($serialNode -and $serialNode.InnerText.Trim() -match '^8\d{6}$') { Write-Host "序列号: $($serialNode.InnerText.Trim())" } # 批量提取其他字段 $fieldXpaths = @{ "Device Model" = "//td[text()='Device Model']/following-sibling::td[1]" "Manufacturer" = "//td[text()='Manufacturer']/following-sibling::td[1]" } foreach ($field in $fieldXpaths.GetEnumerator()) { $node = $htmlDoc.DocumentNode.SelectSingleNode($field.Value) if ($node) { Write-Host "$($field.Key): $($node.InnerText.Trim())" } }
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

