A GetDtsServerPackageInfos
eljárásnak egy szerver és egy mappa nevét kell megadnunk, és már ontja is az
információkat. A szerver azonosításánál pontos nevet, vagy ˝.˝-t használjunk, a ˝(local)˝ vagy ˝localhost˝ nem működik.
- param([string]$folder = "\", [string]$server = ".", $drill = 0);
- # Get assembly (this version come with SQL Server 2012 RC0)
- $dll = "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.ManagedDTS\v4.0_11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.ManagedDTS.dll"
- add-type -path $dll;
- $ssisapp = new-object Microsoft.SqlServer.Dts.Runtime.Application;
- $packages = $ssisapp.GetDtsServerPackageInfos($folder, $server);
- # Get output
- $packages `
- | select name, description, flags, folder, creationdate, packagedatasize, `
- @{name="version";expression={[string]$_.versionmajor + "." + [string]$_.versionminor + "." + [string]$_.versionbuild}}, `
- versioncomments `
- |sort name | format-table -autosize;
- # Drill down if it's needed
- if ($drill -eq 1)
- {
- foreach ($pkg in $packages)
- {
- if ($pkg.flags -eq "Folder")
- {
- $subfolder = $folder + "\" + $pkg.name;
- $subfolder = $subfolder -replace "\\\\", "\";
- .\pkg_list $subfolder $server 1;
- }
- }
- };
(A syntax highlighter egy kicsit belezavarodott a backslash-ekbe. A kód helyes, csak a színezés nem. Sorry.)
update: a fenti szkript akkor fut hibátlanul, ha pkg_list.ps1 néven mentjük el, és abból a könyvtárból futtatjuk, ahová tettük. Ha a $folder mappa alatti almappák tartalma is kell, akkor $drill=1 paraméterrel hívjuk meg. Pl.: .\pkg_list "MSDB" "." 1. Ilyenkor saját magát hívja, pkg_list néven. Már a következő poszton járt az eszem. :)
update: a fenti szkript akkor fut hibátlanul, ha pkg_list.ps1 néven mentjük el, és abból a könyvtárból futtatjuk, ahová tettük. Ha a $folder mappa alatti almappák tartalma is kell, akkor $drill=1 paraméterrel hívjuk meg. Pl.: .\pkg_list "MSDB" "." 1. Ilyenkor saját magát hívja, pkg_list néven. Már a következő poszton járt az eszem. :)
A GetDtsServerPackageInfos meghívásához a Microsoft.SqlServer.ManagedDTS
assembly-re van szükségünk. Csakhogy ennek a dll-nek az SQL Server 2012 RC0-val már a .NET 4-es verziója érkezik. Mivel
a PowerShell a .NET 2-re van felkészítve, ez gondot jelent. Két
lehetőségünk van:
- Ha a gépen fut SQL 2005/2008/2008R2, akkor előkereshetjük egy korábbi verzióját. Például: C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll
- Engedélyezzük a .NET 4-et a PowerShell környezetünkben egy config fájl segítségével. Erről bővebben pl. itt vagy itt lehet infót találni.
Az SSIS 2012-es kiadásával azonban egy teljesen új csomag-telepítő metódus (deploy mode) érkezik, ami átveszi a helyét a korábbi megoldásoknak. A kompatibilitás miatt ugyan továbbra is választható a korábbi módszer, és ugyanezért megmaradtak az msdb.dbo.sysssis... táblák is, de az új módszerhez egy teljesen új struktúra tartozik.
A következő poszt erről fog szólni. Maradjanak velünk, a szünet után folytatjuk! ;)
Nincsenek megjegyzések:
Megjegyzés küldése