Xml 如何使用PowerShell从SSIS包文件中提取值?

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 {

Sql Server集成服务包存储为带有dtsx扩展名的xml文件。我需要能够用Powershell提取他们的内部版本号。文件顶部的相关部分如下所示-




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)