SSIS-在多个包中查找未使用的变量
在处理包含多个包的大型SSIS项目时,这些包可能会开始变得有点混乱,因为这些变量是创建的,但从未使用过,或者由于其他更改而变得多余。我需要一些东西来扫描几个SSIS包并列出所有未使用的变量。这是一个很好的问题,因为我同样关心一些相当大的SSIS包。不幸的是,除了SSIS包之外,没有任何功能可以提供此功能。请参阅所附链接中的讨论: 但是,通过打开SSIS包,您可以通过应用以下链接中概述的步骤来确定变量使用情况:SSIS-在多个包中查找未使用的变量,ssis,Ssis,在处理包含多个包的大型SSIS项目时,这些包可能会开始变得有点混乱,因为这些变量是创建的,但从未使用过,或者由于其他更改而变得多余。我需要一些东西来扫描几个SSIS包并列出所有未使用的变量。这是一个很好的问题,因为我同样关心一些相当大的SSIS包。不幸的是,除了SSIS包之外,没有任何功能可以提供此功能。请参阅所附链接中的讨论: 但是,通过打开SSIS包,您可以通过应用以下链接中概述的步骤来确定变量使用情况: 希望这能有所帮助。我通过使用一些Powershell来回答我自己的问题。下面的脚本
希望这能有所帮助。我通过使用一些Powershell来回答我自己的问题。下面的脚本使用xpath获取变量名,然后使用正则表达式查找出现的次数,如果出现一次,则必须是因为它已定义但从未使用过 唯一需要注意的是,如果您使用的变量名称是dtsx文件中自然存在的单词,那么脚本将不会提取它们。我可能需要扩展脚本,以便只在包中的spesific节点上执行正则表达式搜索
$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
对我来说效果很好。另一个警告是,此方法(显然!)不会发现子dtsx包用作父子包配置变量的任何变量。不过这是一段很棒的Powershell代码Dave,谢谢!