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

如何调整PowerShell正则表达式以正确识别SSIS .dtsx包中的表名

求助:优化正则提取SSIS .dtsx包中的表名

我最近在尝试扫描SSIS的.dtsx包文件,目的是提取里面的SQL语句涉及的表名。我知道正规做法应该用[xml]处理SSIS结构,再配合SQL解析工具,但目前环境限制只能用PowerShell来搞——解析器成本太高,用ANTLR的投入也超出了可接受范围,我需要的是正则优化建议,不是工具推荐哈。

现在遇到两个头疼的问题:

  • 像&.*;这类HTML实体没办法和表名正确分隔,导致捕获的结果里混进了多余的实体内容(比如示例里的ADATABASE2.dbo.TABLEK
TK);
  • dbo.TABLE5完全没被检测到,漏抓了这个表名。

我也清楚硬编码dbo这种架构名不是好主意,会给DBA添管理负担,但当前环境就是这样,先不管这个问题。

我目前用的PowerShell脚本

Get-ChildItem -File -Filter '*.dtsx' | ForEach-Object {
    $Filename = $_.Name
    Select-String -Pattern '(FROM|JOIN)(\s|&.*;)+(\S+)(\s|&.*;)+' -Path $_ -AllMatches | ForEach-Object {
        if ($_.Matches.Groups.captures[3].value -match 'dbo') {
            "$Filename === $($_.Matches.Groups.captures[3].value)"
        }
    }
}

.dtsx文件里的示例文本

USE ADATABASE;
SELECT * FROM dbo.TABLE1 WHERE F1 = 3;
SELECT * FROM dbo.TABLE2 T2 FULL OUTER JOIN dbo.TABLEJ TJ ON T2.KEY = TJ.KEY;
SELECT * FROM dbo.TABLE3 T3 INNER JOIN ADATABASE2.dbo.TABLEK
TK ON
T3.user_id = TK.user_id

SELECT * FROM dbo.TABLE4 T4 FULL OUTER JOIN dbo.TABLE5 T5 ON T4.F1 = T5.F1;
EXIT

脚本执行后的结果

sls_test.dtsx === dbo.TABLE1
sls_test.dtsx === dbo.TABLE2
sls_test.dtsx === dbo.TABLEJ
sls_test.dtsx === dbo.TABLE3
sls_test.dtsx === ADATABASE2.dbo.TABLEK
TK
sls_test.dtsx === dbo.TABLE4

我用的是PowerShell 7.1.5版本,想请教下怎么修改正则表达式,既能排除&.*;这类HTML实体对表名捕获的干扰,又能正确识别出dbo.TABLE5?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:42:35