在处理包含多个包的大型 SSIS 项目时,这些包可能会开始变得有点混乱,其中包含已创建但从未使用过或因其他更改而变得多余的变量。我需要一些可以扫描几个 SSIS 包并列出所有未使用变量的东西。
问问题
2235 次
2 回答
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
于 2013-01-30T09:23:43.080 回答
0
这是一个很好的问题,因为我对一些相当大的 SSIS 包也有同样的担忧。不幸的是,在 SSIS 包之外,没有任何可用的功能可以提供此功能。请参阅附加链接中的讨论:
但是通过打开 SSIS 包,您可以通过应用以下链接中概述的步骤来确定变量的使用情况:
希望这可以帮助。
于 2013-01-29T22:54:52.620 回答