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