Xml 如何使用PowerShell从SSIS包文件中提取值?
Sql Server集成服务包存储为带有dtsx扩展名的xml文件。我需要能够用Powershell提取他们的内部版本号。文件顶部的相关部分如下所示-Xml 如何使用PowerShell从SSIS包文件中提取值?,xml,powershell,ssis,Xml,Powershell,Ssis,Sql Server集成服务包存储为带有dtsx扩展名的xml文件。我需要能够用Powershell提取他们的内部版本号。文件顶部的相关部分如下所示- 2 1 0 265 我需要提取版本号,但DTS名称空间让我感到困惑。完成获取内容后,如何获取值?一旦文件是有效的XML(请参阅我的注释),您只需加载它并转换为XML: $x = [xml] (gc file.xml) 然后,您可以使用类似属性的表示法访问节点: $x.Executable.Property | Where-Object {
2
1
0
265
我需要提取版本号,但DTS名称空间让我感到困惑。完成获取内容后,如何获取值?一旦文件是有效的XML(请参阅我的注释),您只需加载它并转换为XML:
$x = [xml] (gc file.xml)
然后,您可以使用类似属性的表示法访问节点:
$x.Executable.Property | Where-Object { $_.Name -like 'Version*' }
Name #text
---- -----
VersionMajor 1
VersionMinor 0
VersionBuild 265
上述内容似乎不是有效的XML,但假设是,您也可以使用PowerShell 2.0中的Select XML cmdlet来执行此操作:
$ns = @{ dts = 'www.microsoft.com/SqlServer/Dts' }
$xpath = '//dts:Property[@dts:Name="VersionBuild"]'
[xml](get-content file.xml) | Select-Xml $xpath -Namespace $ns | %{$_.Node}
Name #text
---- -----
VersionBuild 265
作为CodePlex项目的一部分,有一个SSIS模块。您可以在其中执行以下操作:
import-module SSIS
$package = Get-ISPackage -path "C:\Program Files\Microsoft SQL Server\100\DTS\Packages\sqlpsx1.dtsx"
$package.VersionBuild
下面是一个提取所有SQL语句的示例,但可以通过更改SELECTNOTES命令的xpath轻松地对其进行调整,以选择任何元素,如变量或连接:
$package = [xml](Get-Content 'package.dtsx')
$ns = [System.Xml.XmlNamespaceManager]($package.NameTable)
$ns.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts")
$nodes = $package.SelectNodes("//property[@name = 'SqlCommand']", $ns)
$sqls = $nodes | % {
New-Object PSObject -Property @{
sql = $_.'#text'
name = $_.ParentNode.parentNode.name
}
}
$sqls
这甚至不是有效的XML。。。第三行的
=
很奇怪。是的,这就是我所指的。:-)实际上,它是有效的XML,使用名称空间(xmlns:part)