Как извлечь значение из файла пакета служб SSIS с помощью PowerShell? - PullRequest
0 голосов
/ 20 января 2010

Пакеты Sql Server Integration Services хранятся в виде XML-файлов с расширением dtsx. Мне нужно иметь возможность извлечь их номера сборки с помощью Powershell. Соответствующая часть в верхней части файла выглядит как -

<?xml version="1.0"?>
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts">
<DTS:ExecutableType="MSDTS.Package.1">
<DTS:Property DTS:Name="PackageFormatVersion">2</DTS:Property>
<DTS:Property DTS:Name="VersionMajor">1</DTS:Property>
<DTS:Property DTS:Name="VersionMinor">0</DTS:Property>
<DTS:Property DTS:Name="VersionBuild">265</DTS:Property>

Мне нужно извлечь номер VersionBuild, но пространство имен DTS меня смущает. После того как я получу get-content, как мне получить значение?

Ответы [ 4 ]

1 голос
/ 20 января 2010

Вышеуказанный код не является допустимым XML, но при условии, что это так, вы можете использовать командлет Select-Xml в PowerShell 2.0, чтобы сделать это также:

$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 
0 голосов
/ 12 ноября 2013

Ниже приведен пример, который извлекает все операторы SQL, но его можно легко адаптировать для выбора любых элементов, таких как переменные или соединения, изменив путь xpath команды SelectNodes:

$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
0 голосов
/ 21 января 2010

В рамках Расширения SQL Server Powershell В проекте CodePlex имеется модуль служб SSIS. Где вы можете сделать что-то вроде этого:

import-module SSIS
$package = Get-ISPackage -path "C:\Program Files\Microsoft SQL Server\100\DTS\Packages\sqlpsx1.dtsx"
$package.VersionBuild
0 голосов
/ 20 января 2010

Как только файл является допустимым XML (см. Мой комментарий), вы можете просто загрузить его и привести к XML:

$x = [xml] (gc file.xml)

Затем вы можете получить доступ к узлам с помощью свойств-нотации:

$x.Executable.Property | Where-Object { $_.Name -like 'Version*' }

Name                                                        #text
----                                                        -----
VersionMajor                                                1
VersionMinor                                                0
VersionBuild                                                265
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...