$currFolder = $null $password = $null function doFile($file) { $fullfileName = $file.FullName $fileName = $fullfileName.SubString($currFolder.Length + 1) $packageName = $fileName.replace(".dtsx","") dtutil /FILE `"$fullfileName`" /Decrypt $password /DestServer $serverName /Encrypt SQL`;$packageName`;5 /Quiet | out-Null if ($LASTEXITCODE -ne 0) { write-host "Failed to deploy: `"$fileName`"" } else { write-host "Deployment successful: `"$fileName`"" } } function doFolder($folder) { write-host "Processing folder: ""$folder""..." set-Location $folder $fullfolderName = $folder.tostring() if ($fullfolderName -ne $currFolder) { $folderName = $fullfolderName.SubString($currFolder.Length) dtutil /FExists SQL`;$folderName /SourceServer $serverName /Quiet | out-Null if ($LASTEXITCODE -ne 0) { write-host "Package Location does not exist: `"$folderName`"" $parentfoldername = $folderName.SubString(0, $folderName.LastIndexOf("\")) $childFolderName = $folderName.SubString($parentfoldername.Length + 1) if ( $parentfoldername -eq "" ) { $parentfoldername = '\' } dtutil /FCreate SQL`;"$parentfolderName"`;"$childFolderName" /SourceServer $serverName /Quiet | out-Null if ($LASTEXITCODE -ne 0) { write-host "Failed to create package location: `"$folderName`"" } else { write-host "Package location created: `"$folderName`"" } } } # Invoke doFile for each .dtsx file. get-childitem *.dtsx | foreach-object { doFile $_ } # Invoke doFolder recursively for each sub-folder get-childitem * | where-object {$_.PSIsContainer} | foreach-object { doFolder $_ } set-Location $folder\.. } if ($args -ne $null -and $args[0] -ne $null) { cd $args[0] } $currFolder = get-location $currFolder = $currFolder.Path if ($args -ne $null -and $args[1] -ne $null) { $serverName = $args[1] } else { $serverName = read-host -Prompt "Specify a SQL Server instance: " } if ($args -ne $null -and $args[2] -ne $null) { $password = $args[2] } else { $password = read-host -Prompt "Enter default package password: " } write-host "Path: $currFolder" write-host "Instance: $serverName" write-host "Password: $password" doFolder $currFolder set-Location $currFolder