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

SQL Agent调度PowerShell任务提取HTML文件名与时间戳遇IE问题求解

SQL Agent中PowerShell解析HTML表格提取文件名与时间戳的解决方案

方案1:正则表达式提取(无额外依赖)

在UseBasicParsing模式下,Invoke-WebRequest返回的Content是纯HTML字符串,直接用正则匹配表格行里的文件名和日期即可,无需IE引擎。

示例代码:

# 获取索引页HTML内容
$response = Invoke-WebRequest -Uri "http://你的索引页地址" -UseBasicParsing
$htmlContent = $response.Content

# 正则匹配表格行(根据目标页面实际HTML结构调整表达式)
# 示例匹配<tr>下的第一个<td>包含链接,第二个<td>是日期的结构
$rowPattern = '<tr>\s*<td>\s*<a href="([^"]+)">[^<]+</a>\s*</td>\s*<td>([^<]+)</td>\s*</tr>'
$matches = [regex]::Matches($htmlContent, $rowPattern, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)

# 转换为结构化对象
$fileInfoList = foreach ($match in $matches) {
    [PSCustomObject]@{
        FileUrl = $match.Groups[1].Value
        FileDate = [DateTime]::Parse($match.Groups[2].Value.Trim())
    }
}

# 结合上次运行日期筛选待处理文件
$lastRunDate = Get-Content -Path "C:\任务存储路径\last_run_date.txt" | Get-Date
$filesToProcess = $fileInfoList | Where-Object { $_.FileDate -gt $lastRunDate }

提示:正则表达式需要根据目标页面的实际HTML结构调整,比如表格的class、td的嵌套层级等,先查看页面源码再修改匹配规则。

方案2:HtmlAgilityPack解析(更可靠)

如果正则容易因HTML结构变动失效,用HtmlAgilityPack这个专业HTML解析库,无需依赖IE,解析更稳定。

步骤:

  1. 先在SQL Agent运行的服务器上,用管理员权限执行PowerShell命令安装模块:
Install-Module -Name HtmlAgilityPack -Scope AllUsers
  1. 任务脚本中使用以下代码:
# 导入模块
Import-Module HtmlAgilityPack

# 获取HTML内容
$response = Invoke-WebRequest -Uri "http://你的索引页地址" -UseBasicParsing
$htmlContent = $response.Content

# 加载并解析HTML
$htmlDoc = New-Object HtmlAgilityPack.HtmlDocument
$htmlDoc.LoadHtml($htmlContent)

# 用XPath选择表格行(根据实际结构调整,比如//table[@id='file-list']//tr)
$rows = $htmlDoc.DocumentNode.SelectNodes("//table//tr")

# 提取每行的文件名和日期
$fileInfoList = foreach ($row in $rows) {
    $linkNode = $row.SelectSingleNode(".//a")
    $dateNode = $row.SelectSingleNode(".//td[2]")
    if ($linkNode -and $dateNode) {
        [PSCustomObject]@{
            FileUrl = $linkNode.GetAttributeValue("href", "")
            FileDate = [DateTime]::Parse($dateNode.InnerText.Trim())
        }
    }
}

# 筛选待处理文件
$lastRunDate = Get-Content -Path "C:\任务存储路径\last_run_date.txt" | Get-Date
$filesToProcess = $fileInfoList | Where-Object { $_.FileDate -gt $lastRunDate }

提示:XPath路径需要匹配目标页面的表格结构,比如表格有特定ID或class时,写成//table[@class='file-table']//tr更精准。

额外注意点

  • 确保SQL Agent服务账户有访问索引页、读写存储上次运行日期文件的权限。
  • 如果日期格式不固定,把[DateTime]::Parse换成[DateTime]::ParseExact并指定格式,比如[DateTime]::ParseExact($dateNode.InnerText.Trim(), "yyyy-MM-dd", $null),避免解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:20:17