Technical Article

Another Script to Dump DTS packages to Text

,

This script will dump most of the structure of a DTS package to a text file. This includes connections strings (note SQL Server connections have their passwords encrypted so the won't dump), tasks, steps, global veriables, etc.) The script is command line drive and should allow for the use of trusted or SQL logins. I have used this to dump all of my DTS packages to text files so that I can easily search them to see what tables, columns, etc. are being used.

Option Explicit
' ************************************
' ************************************
' ************************************
Dim sServerName 
Dim bServerName 
Dim sLoginId 
Dim bLoginId 
Dim sPassword 
Dim bPassword 
Dim sDatabase
Dim bDatabase
Dim bIncludHeadings
Dim bIs70
Dim sPath
Dim bPath
DIM sPackageName
DIM bPackageName

DIM sDTSPkg

Dim oServer 

Dim oResults
Dim iRowCount
Dim sQuery

Const DTSSQLStgFlag_Default = 0
Const DTSSQLStgFlag_UseTrustedConnection = 256
Const DTSStepExecResult_Failure = 1
Const ForWriting = 2
' ************************************
' ************************************
' ************************************

CLASS DTSPackageScript
	DIM oFile

	Private Function ScriptColumn(oColumn, indent)
		Dim oProperty
		
		FOR Each oProperty IN oColumn.Properties
			oFile.WriteLine  String(indent, vbTab) &  "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value
		NEXT

	oFile.WriteLine   

	END Function


	' ************************************

	Private Function ScriptConnection(oConnection, indent)

		Dim oProperty
		
		ON ERROR RESUME NEXT
	
		oFile.WriteLine String(indent, vbTab) & "===> " & _
				oConnection.name
		oFile.WriteLine String(indent, vbTab) & "*Catalog:  " & _
				oConnection.Catalog 
		oFile.WriteLine String(indent, vbTab) & "*Connected:  " & _
				oConnection.Connected 
		oFile.WriteLine String(indent, vbTab) & "*ConnectImmediate:  " & _
				oConnection.ConnectImmediate 
		oFile.WriteLine String(indent, vbTab) & "*ConnectionTimeout:  " & _
				oConnection.ConnectionTimeout 
		oFile.WriteLine String(indent, vbTab) & "*DataSource:  " &  _
				oConnection.DataSource 
		oFile.WriteLine String(indent, vbTab) & "*Description:  " & _
				oConnection.Description 
		oFile.WriteLine String(indent, vbTab) & "*ID:  " & _
				oConnection.ID 
		oFile.WriteLine String(indent, vbTab) & "*InTransaction:  " & _
				oConnection.InTransaction 
		oFile.WriteLine String(indent, vbTab) & "*InUse:  " & _
				oConnection.InUse 
		oFile.WriteLine String(indent, vbTab) & "*LastOwnerTaskName:  " & _
				oConnection.LastOwnerTaskName 
		oFile.WriteLine String(indent, vbTab) & "*Parent:  " & _
				oConnection.Parent 
		oFile.WriteLine String(indent, vbTab) & "*Password:  " & _
				oConnection.Password 
		oFile.WriteLine String(indent, vbTab) & "*ProviderId:  " & _
				oConnection.ProviderId 
		oFile.WriteLine String(indent, vbTab) & "*Reusable:  " & _
				oConnection.Reusable 
		oFile.WriteLine String(indent, vbTab) & "*UDLPath:  " & _
				oConnection.UDLPath 
		oFile.WriteLine String(indent, vbTab) & "*UseDSL:  " & _
				oConnection.UseDSL 
		oFile.WriteLine String(indent, vbTab) & "*UserId:  " & _
				oConnection.UserId 
		oFile.WriteLine String(indent, vbTab) & "*UseTrustedConnection:  " & _
				oConnection.UseTrustedConnection 

		oFile.WriteLine  String(indent, vbTab) & _
				" -- Oledb connection properties -- " 
		FOR EACH oProperty in oConnection.ConnectionProperties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.name & ":" & vbTab & _
				oProperty.value 
		NEXT 
	
		oFile.WriteLine   

		SET oConn = Nothing

	END Function


	' ************************************
	Private Function ScriptCustomTask(oCustomTask, indent)

		Dim oProperty

		FOR Each oProperty IN oCustomTask.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value
		NEXT
	
		oFile.WriteLine   
	
	END Function

	' ************************************

	Private Function ScriptDTSMQMessage(oDTSMQMessage, indent)

		Dim oProperty
		
		FOR Each oProperty IN oDTSMQMessage.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptDynamicPropertiesTaskAssignment( _
		oDynamicPropertiesTaskAssignment, indent)

		Dim oProperty
		
		FOR Each oProperty IN oDynamicPropertiesTaskAssignment.Properties
			oFile.WriteLine String(indent, vbtab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptGlobalVariable(oGlobalVariable, indent)

		Dim oProperty
		
		FOR Each oProperty IN oGlobalVariable.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptLookUp(oLookUp, indent)

		Dim oProperty
		
		FOR Each oProperty IN oLookUp.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptOLEDBProperty(oOLEDBProperty, indent)

		Dim oProperty
		
		FOR Each oProperty IN oOLEDBProperty.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptOLEDBProviderInfo(oOLEDBProviderInfo, indent)
	' Note: May have to list out each property. 
	'	not sure supports the Poperty collection

		Dim oProperty
		
		FOR Each oProperty IN oOLEDBProviderInfo.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptPackageInfo(oPackageInfo, indent)

		Dim oProperty
		
		FOR Each oProperty IN oPackageInfo.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptPackageLineage(oPackageLineage, indent)

		Dim oProperty
		
		FOR Each oProperty IN oPackageLineage.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptPackageLogRecord(oPackageLogRecord, indent)

		Dim oProperty
		
		FOR Each oProperty IN oPackageLogRecord.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptPrecedenceConstraint(oPrecedenceConstraint, indent)

		Dim oProperty
		
		FOR Each oProperty IN oPrecedenceConstraint.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptProperty(Properties, indent)

		Dim oProperty

		ON ERROR RESUME NEXT
		
		FOR Each oProperty IN Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptSavedPackageInfo(oSavedPackageInfo, indent)

		Dim oProperty
		
		FOR Each oProperty IN oSavedPackageInfo.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptScriptingLanguageInfo(oScriptingLanguageInfo, indent)

		Dim oProperty
		
		FOR Each oProperty IN oScriptingLanguageInfo.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptStep(oStep, indent)

		Dim oProperty
		Dim oPrecedenceConstraint

		FOR Each oProperty IN oStep.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
			
		NEXT
		oFile.WriteLine String(indent, vbTab) & "-- Precedence Constraint" 
		ScriptPrecedenceConstraints oStep, indent + 1

	END Function

	' ************************************

	Private Function ScriptStepLineage(oStepLineage, indent)

		Dim oProperty

		FOR Each oProperty IN oStepLineage.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptStepLogRecord(oStepLogRecord, indent)

		Dim oProperty
		
		FOR Each oProperty IN oStepLogRecord.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptTaskInfo(oTaskInfo, indent)

		Dim oProperty
		
		FOR Each oProperty IN oTaskInfo.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptTask(oTask, indent)
	'  Need to add in Handling of each different 
	'  type of task i.e., ActiveScriptTask, BulkInsertTask,
	'  etc.

		Dim oProperty
		
		FOR Each oProperty IN oTask.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

		ON ERROR RESUME NEXT
		Dim oDTSObject
		SELECT CASE oTask.CustomTaskID
			CASE "DTSDataPumpTask"
				Set oDTSObject = oTask.CustomTask
				'oFile.WriteLine String(indent, vbTab) & _
				'	"-- Destination Command Properties" 
				'ScriptOLEDBProperties _ 
				'	oDTSObject.DestinationCommandProperties, indent + 1
				
				'oFile.WriteLine String(indent, vbTab) & _
				'	"-- Source Command Properties" 
				'ScriptOLEDBProperties _ 
				'	oDTSObject.SourceCommandProperties, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Destination Column Definitions " 
				ScriptColumns _
					oDTSObject.DestinationColumnDefinitions, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Lookups" 
				ScriptLookups oDTSObject, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Transformations" 
				ScriptTransformations oDTSObject, indent + 1
	
			CASE "DTSDataDrivenQueryTask"
				Set oDTSObject = oTask.CustomTask
				'oFile.WriteLine String(indent, vbTab) & _
				'	"-- Destination Command Properties" 
				'ScriptOLEDBProperties _ 
				'	oDTSObject.DestinationCommandProperties, indent + 1 
				
				'oFile.WriteLine String(indent, vbTab) & _
				'	"-- Source Command Properties" 
				'ScriptOLEDBProperties _
				'	oDTSObject.SourceCommandProperties, indent + 1 
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Destination Column Definitions " 
				ScriptColumns _
					oDTSObject.DestinationColumnDefinitions, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Lookups" 
				ScriptLookups oDTSObject, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Transformations" 
				ScriptTransformations oDTSObject, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Delete Query Columns  " 
				ScriptColumns oDTSObject.DeleteQueryColumns, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Insert Query Columns " 
				ScriptColumns oDTSObject.InsertQueryColumns, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- Update Query Columns " 
				ScriptColumns oDTSObject.UpdateQueryColumns, indent + 1
				
				oFile.WriteLine String(indent, vbTab) & _
					"-- User Query Columns " 
				ScriptColumns oDTSObject.UserQueryColumns, indent + 1
				
			CASE "DTSMessageQueueTask"
				Set oDTSObject = oTask.CustomTask
				oFile.WriteLine String(indent, vbTab) & _
					"-- DTSMQMessages " 
				ScriptDTSMQMessages oDTSObject.DTSMQMessages, indent + 1

			CASE "DTSDynamicPropertiesTask"
				Set oDTSObject = oTask.CustomTask
				oFile.WriteLine String(indent, vbTab) & _
					"-- Dynamic Properties Task Assignments" 
				ScriptDynamicPropertiesTaskAssignment _ 
					oDTSObject.DynamicPropertiesTaskAssignments, indent + 1 

			CASE "DTSExecutePackageTask"
				Set oDTSObject = oTask.CustomTask
				oFile.WriteLine String(indent, vbTab) & _
					"-- Global Variables" 
				ScriptGlobalVariables _ 
					oDTSObject, indent 
		
			CASE "DTSParallelDataPumpTask"
				Set oDTSObject = oTask.CustomTask
				'oFile.WriteLine String(indent, vbTab) & _
				'	"-- Destination Command Properties" 
				'ScriptOLEDBProperties _ 
				'	oDTSObject.DestinationCommandProperties, indent + 1 
				
				'oFile.WriteLine String(indent, vbTab) & _
				'	"-- Source Command Properties" 
				'ScriptOLEDBProperties _
				'	oDTSObject.SourceCommandProperties, indent + 1 
				oFile.WriteLine String(indent, vbTab) & _
					"-- Transformation Sets" 
				ScriptTransformationSets _ 
					oDTSObject, indent 
				
		END SELECT 

		ScriptTask = sText

	END Function

	' ************************************

	Private Function ScriptTaskLogRecord(oTaskLogRecord, indent)

		Dim oProperty
		
		FOR Each oProperty IN oTaskLogRecord.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptTransformation(oTransformation, indent)
	'  Need to other collections

		Dim oProperty
		
		FOR Each oProperty IN oTransformation.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT
		oFile.WriteLine String(indent, vbTab) & "-- SourceColumns "  
		ScriptColumns oTransformation.SourceColumns, indent + 1

		oFile.WriteLine String(indent, vbTab) & "-- DestinationColumns "  
		ScriptColumns oTransformation.DestinationColumns, indent + 1

		oFile.WriteLine String(indent, vbTab) & "-- TransformServerProperties "  
		ScriptColumns oTransformation.TransformServerProperties, indent + 1

	END Function


	' ************************************

	Private Function ScriptTransformationtionInfo(oTransformationtionInfo, indent)
	'  Need to other collections

		Dim oProperty
		
		FOR Each oProperty IN oTransformationtionInfo.Properties
			oFile.WriteLine String(indent, vbTab) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function

	' ************************************

	Private Function ScriptTransformationSet(oTransformationSet, indent)
	'  Need to other collections

		Dim oProperty
		
		FOR Each oProperty IN oTransformationSet.Properties
			oFile.WriteLine String(indent, vbTab ) & "*" _
				& oProperty.Name & ":" _
				& vbTab & oProperty.Value 
		NEXT

	END Function


	' ************************************
	' Collections
	' ************************************

	Private Function ScriptColumns(oColumns, indent)

		Dim oColumn

		FOR EACH oColumn in oColumns 
			ScriptColumn oColumn, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptConnections(oDtsPackage, indent)
		Dim oConns
		Dim oConnection

		SET oConns = oDtsPackage.Connections
		FOR EACH oConnection IN oConns
			ScriptConnection oConnection, indent
		NEXT

		SET oConns = Nothing

	END Function

	' ************************************

	Private Function ScriptDTSMQMessages(oDtsPackage, indent)
		Dim oDTSMQMessage

		FOR EACH oDTSMQMessage IN oDtsPackage.DTSMQMessages
			ScriptDTSMQMessage oDTSMQMessage, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptDynamicPropertiesTaskAssignments(oDtsPackage, indent)
		Dim oDynamicPropertiesTaskAssignment

		FOR EACH oDynamicPropertiesTaskAssignment IN oDtsPackage.DynamicPropertiesTaskAssignments
			ScriptDynamicPropertiesTaskAssignment _ 
					oDynamicPropertiesTaskAssignment, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptGlobalVariables(oDtsPackage, indent)
		Dim oGlobalVariable

		FOR EACH oGlobalVariable IN oDtsPackage.GlobalVariables
			ScriptGlobalVariable oGlobalVariable, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptLookups(oDtsPackage, indent)
		Dim oLookup

		FOR EACH oLookup IN oDtsPackage.Lookups
			ScriptLookup oLookup, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptOLEDBProperties(oDtsPackage, indent)
		Dim oOLEDBProperty

		FOR EACH oOLEDBProperty IN oDtsPackage.OLEDBProperties
			ScriptOLEDBProperty oOLEDBProperty, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptOLEDBProviderInfos(oDtsPackage, indent)
		Dim oOLEDBProviderInfo

		FOR EACH oOLEDBProviderInfo IN oDtsPackage.OLEDBProviderInfos
			ScriptOLEDBProviderInfo oOLEDBProviderInfo, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptPrecedenceConstraints(oDtsPackage, indent)
		Dim oPrecedenceConstraint

		FOR EACH oPrecedenceConstraint IN oDtsPackage.PrecedenceConstraints
			ScriptPrecedenceConstraint oPrecedenceConstraint, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptProperties(oDtsPackage, indent)
		Dim oProperty

		ON ERROR RESUME NEXT

		FOR EACH oProperty IN oDtsPackage.Properties
			ScriptProperty oProperty, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptSavedPackageInfos(oDtsPackage, indent)
		Dim oSavedPackageInfo

		ON ERROR RESUME NEXT

		FOR EACH oSavedPackageInfo IN oDtsPackage.SavedPackageInfos
			ScriptSavedPackageInfo oSavedPackageInfo, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptScriptingLanguageInfos(oDtsPackage, indent)
		Dim oScriptingLanguageInfo

		FOR EACH oScriptingLanguageInfo IN oDtsPackage.ScriptingLanguageInfos
			oFile.WriteLine String(indent, vbTab) & _
				"*UseCache:" & vbTab & _
				oScriptingLanguageInfo.UseCache
			ScriptScriptingLanguageInfo oScriptingLanguageInfo, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptSteps(oDtsPackage, indent)
		Dim oStep

		FOR EACH oStep IN oDtsPackage.Steps
			oFile.WriteLine vbCrLf & String(indent, vbTab ) & "==> " & _
				oStep.Name  
			ScriptStep oStep, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptTaskInfos(oDtsPackage, indent)
		Dim oTaskInfo

		FOR EACH oTaskInfo IN oDtsPackage.TaskInfos
			oFile.WriteLine String(indent, vbTab) & _
				"*UseCache:" & vbTab & _
				oTaskInfo.UseCache
			ScriptTaskInfo oTaskInfo, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptTasks(oDtsPackage, indent)
		Dim oTask

		FOR EACH oTask IN oDtsPackage.Tasks
			oFile.WriteLine vbCrLf & String(indent, vbTab) & _ 
				"==> " & oTask.Name

			oFile.WriteLine String(indent, vbTab) & _
				"*Custom Task ID:" & vbTab & oTask.CustomTaskID

			ScriptTask oTask, indent + 1

		NEXT

	END Function

	' ************************************

	Private Function ScriptTransformationInfos(oDtsPackage, indent)
		Dim oTransformationInfo

		FOR EACH oTransformationInfo IN oDtsPackage.TransformationInfos
			ScriptTransformationInfo oTransformationInfo, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptTransformations(oDtsPackage, indent)
		Dim oTransformation

		FOR EACH oTransformation IN oDtsPackage.Transformations
			ScriptTransformation oTransformation, indent + 1
		NEXT

	END Function

	' ************************************

	Private Function ScriptTransformationSets(oDtsPackage, indent)
		Dim oTransformationSet

		FOR EACH oTransformationSet IN oDtsPackage.TransformationSets
			ScriptTransformationSet oTransformationSet, indent + 1

			oFile.WriteLine String(indent, vbTab) & "-- Destination Column Definitions "  
				ScriptColumns oTransformationSet.DestinationColumnDefinitions, indent + 1

			oFile.WriteLine String(indent, vbTab) & "-- Lookups "  
				ScriptLookups oTransformationSet.Lookups, indent + 1

			oFile.WriteLine String(indent, vbTab) & "-- Transformation "  
				ScriptTransformations oTransformationSet, indent

			oFile.WriteLine String(indent, vbTab) & "-- Delete Query Columns "  
				ScriptColumns oTransformationSet.DeleteQueryColumns, indent + 1

			oFile.WriteLine String(indent, vbTab) & "-- Insert Query Columns "  
				ScriptColumns oTransformationSet.InsertQueryColumns, indent + 1

			oFile.WriteLine String(indent, vbTab) & "-- Update Query Columns "  
				ScriptColumns oTransformationSet.UpdateQueryColumns, indent + 1

			oFile.WriteLine String(indent, vbTab) & "-- User Query Columns "  
				ScriptColumns oTransformationSet.UserQueryColumns, indent + 1

		NEXT

	END Function

	' ************************************

	Public Sub DumpPackage(sPackageName, sServerName, sLoginId, sPassword, oOutFile)

		DIM oDTSPackage
		DIM indent

		Set oFile = oOutFile

		indent = 1

		oFile.WriteLine "================================================"
		oFile.WriteLine sPackageName
		oFile.WriteLine "================================================"

		ON ERROR RESUME NEXT

		Set oDTSPackage = CreateObject("DTS.Package")


		IF LEN(TRIM(sLoginId)) = 0 THEN
			oDTSPackage.LoadFromSQLServer sServerName, , , _
				DTSSQLStgFlag_UseTrustedConnection,"","","",sPackageName
		ELSE 
			oDTSPackage.LoadFromSQLServer sServerName, sLoginId, sPassword, _
				DTSSQLStgFlag_Default,"","","",sPackageName
		End IF

		oFile.WriteLine   "***** Package Properties *****"
		ScriptProperty oDTSPackage.Properties, indent

		oFile.WriteLine   "***** Package Connections *****"
		ScriptConnections oDTSPackage, indent

		oFile.WriteLine   "***** Package Global Variables *****"
		ScriptGlobalVariables oDTSPackage, indent

		oFile.WriteLine   "***** Package Save PackageInfos *****"
		ScriptSavedPackageInfos oDTSPackage, indent

		oFile.WriteLine   "***** Package Steps *****"
		ScriptSteps oDTSPackage, indent

		oFile.WriteLine   "***** Package Tasks *****"
		ScriptTasks oDTSPackage, indent

		oFile.WriteLine   

		SET oDTSPackage = Nothing
		Set oFile = Nothing
	END Sub

END CLASS	

' **********************************************
' **********************************************
' **********************************************
' **********************************************

Main


' *******************************************************************
sub Main
	Dim objArgs
	Dim iCnt
	Dim tStartTime
	Dim tEndTime

	tStartTime = Time()
	iCnt = 0

	WScript.Echo "Start Time:  " & FormatDateTime(Date, vbLongDate) _
		& " " & FormatDateTime(tStartTime, vbLongTime)


	'	check for command line switches
	If not GetSwitches then
		Exit Sub
	end if


	' Creat an object
	'Set oServer = CreateObject("SQLDMO.SQLServer")

	'oServer.Connect sServerName, sLoginId, sPassword
	Set oServer = ServerConnect(sServerName, sLoginId, sPassword)

	if (oServer is nothing) then
		WScript.Echo"Error Creating Object"
		Exit sub
	end if 

	' Remove any trailing 	
        IF Right(sPath,1) = "\" THEN
		sPath = Left(sPath,Len(sPath)-1)
	END If	

	CheckDir (sPath)	

	IF bPackageName THEN
		sQuery = "SELECT DISTINCT [NAME] FROM msdb.dbo.sysdtspackages" & _
			" WHERE [NAME] = '" & sPackageName & "'"
	ELSE
		sQuery = "SELECT DISTINCT [NAME] FROM msdb.dbo.sysdtspackages"
	END IF 



	SET oResults = oServer.ExecuteWithResults (sQuery)
	
	iCnt = 	oResults.Rows

	FOR iRowcount = 1 TO oResults.Rows
		sDTSPkg = oResults.GetColumnString(iRowCount, 1)
		Wscript.Echo vbTab & sDTSPkg _
		& vbTab & "(" & FormatDateTime(Date(),vbShortDate) _
		& " " & FormatDateTime(Time(), vbLongTime) & ")"
		
		DumpPackage sDTSPkg
	NEXT


	oServer.DisConnect
	oServer.Close
	Set oServer = Nothing

	tEndTime = Time()

	WScript.Echo "End Time:  " & FormatDateTime(Date(), vbLongDate) _
		& " " & FormatDateTime(tEndTime, vbLongTime)
	WScript.Echo "Processed " & iCnt & " packages in " _
		& DateDiff("n", tStartTime, tEndTime) _
		& " Minutes"

End Sub

'*************************************
'*************************************
'*************************************
Function DumpPackage(sPackageName)

	DIM clsDTSScript

	DIM sPackageFile
	DIM oFS
	DIM oFT
'	DIM sPackageName


	SET oFS = CreateObject("Scripting.FileSystemObject")

	SET clsDTSScript = New DTSPackageScript

	sPackageFile =  sPath & "\" & sPackageName & ".txt"
	SET oFT = oFS.CreateTextFile(sPackageFile,True)

	clsDTSScript.DumpPackage sPackageName, sServerName, sLoginId, sPassword, oFT
	SET clsDTSScript = Nothing
	oFT.Close()
	SET oFT = Nothing
	SET oFS = Nothing

End Function

'*************************************
'*************************************
'*************************************
Function GetSwitches()
	Dim j
	Dim sOption
	Dim iCnt
	Dim objArgs

	GetSwitches = True
	set objArgs = Wscript.Arguments

	iCnt = ObjArgs.Count - 1

	sServerName = ""
	bServerName = False
	sLoginId = ""
	bLoginId = False
	sPassword = ""
	bPassword = False
	sDatabase = ""
	bDatabase = False
	bIncludHeadings = False
	sPath = ""
	bPath = False
	sPackageName = ""
	bPackageName = False

'	bTrustedConnect = False

	j = 0

	While j <= iCnt
		If Left(objArgs(j),1) = "-" Or _
		   Left(objArgs(j),1) = "/" Then
			
			sOption = UCase(Mid(objArgs(j), 2, 1))
			Select Case sOption
				Case "S"
					bServername = TRUE
					if Len(Trim(objArgs(j))) = 2 Then
						j = j + 1
						sServerName = Trim(objArgs(j))
						if Len(Trim(objArgs(j))) = 0 then
							bServerName = False
						End if
					Else
						sServerName = Trim(Mid(objArgs(j),3))
					End if
				
				Case "U"
					bLoginId = TRUE
					if Len(Trim(objArgs(j))) = 2 Then
						j = j + 1
						sLoginId = Trim(objArgs(j))
						if Len(Trim(objArgs(j))) = 0 then
							bLoginId = False
						End if
					Else
						sLoginId = Trim(Mid(objArgs(j),3))
					End if
					
				Case "P"
					bPassword = TRUE
					if Len(Trim(objArgs(j))) = 2 Then
						j = j + 1
						if j > iCnt Then  ' There is nothing following the password
							bPassword = False
							j = j - 1
						else
							sPassword = Trim(objArgs(j))
							if Len(Trim(objArgs(j))) = 0 then
								bPassword = False
							End if
						End if
					Else
						sPassword = Trim(Mid(objArgs(j),3))
					End if

				Case "D"
					bPath = TRUE
					if Len(Trim(objArgs(j))) = 2 Then
						j = j + 1
						sPath = Trim(objArgs(j))
						if Len(Trim(objArgs(j))) = 0 then
							bPath = False
						End if
					Else
						sPath = Trim(Mid(objArgs(j),3))
					End if

				Case "N"
					bPackageName = TRUE
					if Len(Trim(objArgs(j))) = 2 Then
						j = j + 1
						sPackageName = Trim(objArgs(j))
						if Len(Trim(objArgs(j))) = 0 then
							bPackageName = False
						End if
					Else
						sPackageName = Trim(Mid(objArgs(j),3))
					End if
					
				Case "?"
					Usage
					GetSwitches = False
					Exit Function
			End Select
		end if 	
		j = j + 1
	Wend

	If (bPassword Or bLoginId) and Not bServerName then
		WScript.Echo "***ERROR:  Must specifiy Server when using Login Id or Password"
		Usage
		GetSwitches = False
	end if

	If Not bpath then
		WScript.Echo "***ERROR:  Must specifiy a path to place output into."
		Usage
		GetSwitches = False
	end if

End Function

'*************************************
'*************************************
'*************************************
Function Usage()

	WScript.Echo 
	WScript.Echo "==========================================="
	WScript.Echo "ScriptDTSPkg.vbs Version 1.00"
	WScript.Echo vbTab & "By Mark Carey"
	WScript.Echo "Usage:"
	WScript.Echo "cscript  ScriptDTSPkg.vbs [//Nologo] [-S <server> [-U <loginid> [-P <password>]]] "
	WScript.Echo vbTab & vbTab & "-D <directory> [-N <Package name>]"
	WScript.Echo 
	WScript.Echo vbtab & "-S <server> = SQL Server name to connect to"
	WScript.Echo vbTab & "-U <loginId> = SQL Server login id"
	WScript.Echo vbTab & vbTab & "Uses trusted connection if no -U"
	WScript.Echo vbTab & "-P <password> = SQL Server password"
	WScript.Echo vbTab & "-D <directory> = Path to write files to"
	WScript.Echo vbTab & "-N <Package name> = optional package name to extract"
	WScript.Echo vbTab & "-? = Usage"
	WScript.Echo "==========================================="

End function

'*************************************
'*************************************
'*************************************
Function CheckDir(sPath)
	Dim oFs
	
	Set oFs = CreateObject("Scripting.FileSystemObject")
	
	if oFs.FolderExists(sPath) = vbFalse then
		oFs.CreateFolder(sPath)
	end if
	
	Set oFs = Nothing	

End function
'*************************************
'*************************************
'*************************************
FUNCTION ServerConnect(sServerName, sUID, sPwd)

	Dim bServerName
	Dim bPassword
	Dim bUid
	Dim mobjConn


	Set ServerConnect = Nothing
	
	IF LEN(TRIM(sServerName)) = 0 THEN
		bServerName = vbFalse
	ELSE 
		bServerName = vbTrue
	END IF 

	IF LEN(TRIM(sPwd)) = 0 THEN
		bPassword = vbFalse
	ELSE 
		bPassword = vbTrue
	END IF 

	IF LEN(TRIM(sUid)) = 0 THEN
		bUid = vbFalse
	ELSE 
		bUid = vbTrue
	END IF 

	Set mobjConn = CreateObject("SQLDMO.SQLServer")

	ON ERROR RESUME NEXT
	IF (mobjConn IS Nothing) THEN
		WScript.Echo "Error Creating Server Object"
		Connect = vbFalse
		Exit Function
	ELSE
		IF bServerName THEN 
			IF bPassword THEN
					mobjConn.Connect sServerName, sUid, sPwd
				ELSE
				IF bUid THEN
					mobjConn.Connect sServerName, sUid
				ELSE	
					mobjConn.LoginSecure = vbTrue
					mobjConn.connect sServerName ' This uses trusted
				END IF
			END IF	
		ELSE
			mobjConn.LoginSecure = vbTrue
			mobjConn.connect sServerName ' This uses trusted
		END IF
	END IF 

	IF Err.Number <> 0 THEN
		WScript.Echo "Error Connecting to server"
		WScript.Echo Err.Description
		Connect = vbFalse
		Exit Function
	END IF
		

	Set ServerConnect = mobjConn

END FUNCTION

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating