当处理包含多个软件包的大型SSIS项目时,软件包可能会开始变得有些混乱,这些变量是已创建但从未使用过或已被其他更改变为冗余的变量。我需要能够扫描多个SSIS包并列出所有未使用变量的东西。
答案 0 :(得分:4)
我设法通过使用一些Powershell来回答我自己的问题。下面的脚本使用xpath来获取变量名称,然后使用正则表达式来查找出现次数,如果它必须出现,因为它已被定义但从未使用过。
唯一需要注意的是,如果你对dtsx文件中自然存在的单词变量使用名称,那么脚本就不会选择它们。我可能需要扩展我的脚本,只对包中的特定节点进行正则表达式搜索。
$results = @()
Get-ChildItem -Filter *.dtsx |
% {
$xml = [xml](Get-Content $_)
$Package = $_.Name
$ns = [System.Xml.XmlNamespaceManager]($xml.NameTable)
$ns.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts")
$var_list = @($xml.SelectNodes("//DTS:Variable/DTS:Property[@DTS:Name = 'ObjectName']", $ns) | % {$_.'#text'})
$var_list | ? {@([Regex]::Matches($xml.InnerXml, "\b$($_)\b")).Count -eq 1} |
% { $results += New-Object PSObject -Property @{
Package = $Package
Name = $_}
}
}
$results
答案 1 :(得分:0)
这是一个很好的问题,因为我对一些相当大的SSIS包有同样的担忧。不幸的是,在SSIS包外部,没有任何可用的功能可以提供此功能。请参阅附加链接中的讨论:
但是,通过打开SSIS包,您可以通过应用以下链接中列出的步骤来确定变量的使用情况:
find-ssis-variable-dependencies-with-bi-xpress
希望这有帮助。