/////////////////////////////// Get File List Task//////////////////////////////////////////////// #region Help: Introduction to the script task /* The Script Task allows you to perform virtually any operation that can be accomplished in * a .Net application within the context of an Integration Services control flow. * * Expand the other regions which have "Help" prefixes for examples of specific ways to use * Integration Services features within this script task. */ #endregion #region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.Diagnostics; using System.Collections.Generic; using System.IO; #endregion namespace ST_46a0e140e3054f92afc2d06af997562c { /// /// ScriptMain is the entry point class of the script. Do not change the name, attributes, /// or parent of this class. /// [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { #region Help: Using Integration Services variables and parameters in a script /* To use a variable in this script, first ensure that the variable has been added to * either the list contained in the ReadOnlyVariables property or the list contained in * the ReadWriteVariables property of this script task, according to whether or not your * code needs to write to the variable. To add the variable, save this script, close this instance of * Visual Studio, and update the ReadOnlyVariables and * ReadWriteVariables properties in the Script Transformation Editor window. * To use a parameter in this script, follow the same steps. Parameters are always read-only. * * Example of reading from a variable: * DateTime startTime = (DateTime) Dts.Variables["System::StartTime"].Value; * * Example of writing to a variable: * Dts.Variables["User::myStringVariable"].Value = "new value"; * * Example of reading from a package parameter: * int batchId = (int) Dts.Variables["$Package::batchId"].Value; * * Example of reading from a project parameter: * int batchId = (int) Dts.Variables["$Project::batchId"].Value; * * Example of reading from a sensitive project parameter: * int batchId = (int) Dts.Variables["$Project::batchId"].GetSensitiveValue(); * */ #endregion #region Help: Firing Integration Services events from a script /* This script task can fire events for logging purposes. * * Example of firing an error event: * Dts.Events.FireError(18, "Process Values", "Bad value", "", 0); * * Example of firing an information event: * Dts.Events.FireInformation(3, "Process Values", "Processing has started", "", 0, ref fireAgain) * * Example of firing a warning event: * Dts.Events.FireWarning(14, "Process Values", "No values received for input", "", 0); * */ #endregion #region Help: Using Integration Services connection managers in a script /* Some types of connection managers can be used in this script task. See the topic * "Working with Connection Managers Programatically" for details. * * Example of using an ADO.Net connection manager: * object rawConnection = Dts.Connections["Sales DB"].AcquireConnection(Dts.Transaction); * SqlConnection myADONETConnection = (SqlConnection)rawConnection; * //Use the connection in some code here, then release the connection * Dts.Connections["Sales DB"].ReleaseConnection(rawConnection); * * Example of using a File connection manager * object rawConnection = Dts.Connections["Prices.zip"].AcquireConnection(Dts.Transaction); * string filePath = (string)rawConnection; * //Use the connection in some code here, then release the connection * Dts.Connections["Prices.zip"].ReleaseConnection(rawConnection); * */ #endregion /// /// This method is called when this script task executes in the control flow. /// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure. /// To open Help, press F1. /// public void Main() { // s3://mybucket/ string cmdParams = $@"s3 ls {Dts.Variables["$Project::S3Bucket"].Value}job-view-logs/aws.stg/emr-output/to-do --recursive"; string error = string.Empty; List fileList = new List(); ProcessStartInfo psi = new ProcessStartInfo("aws.exe", cmdParams); psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.CreateNoWindow = true; //psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //UseShellExecute MUST BE false to redirect the output psi.UseShellExecute = false; System.Diagnostics.Process getFileList; getFileList = System.Diagnostics.Process.Start(psi); using (StreamReader myOutput = getFileList.StandardOutput) { string file; while ((file = myOutput.ReadLine()) !=null) { fileList.Add(file.Substring(file.IndexOf("job-view-logs"))); } } /////////////////////////////////////////////////// /////////////Begin Fill Public Var///////////////// /////////////////////////////////////////////////// ///We fill the DTS var with the fileList list. ///When filling it inside the loop and adding to it for each ///row leads to an improperly formatted object and it can't be used ///in the foreach loop in the main pkg. So it has to be done ///outside the While above and filled all at once. Dts.Variables["User::AwsS3FileList"].Value = fileList; /////////////////////////////////////////////////// /////////////END Fill Public Var/////////////////// /////////////////////////////////////////////////// Dts.TaskResult = (int)ScriptResults.Success; } #region ScriptResults declaration /// /// This enum provides a convenient shorthand within the scope of this class for setting the /// result of the script. /// /// This code was generated automatically. /// enum ScriptResults { Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure }; #endregion } } ///////////////////////////////////////////// Copy Files Task ////////////////////////////////////////////////////////// #region Help: Introduction to the script task /* The Script Task allows you to perform virtually any operation that can be accomplished in * a .Net application within the context of an Integration Services control flow. * * Expand the other regions which have "Help" prefixes for examples of specific ways to use * Integration Services features within this script task. */ #endregion #region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.Diagnostics; using System.Collections.Generic; using System.IO; #endregion namespace ST_46a0e140e3054f92afc2d06af997562c { /// /// ScriptMain is the entry point class of the script. Do not change the name, attributes, /// or parent of this class. /// [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { #region Help: Using Integration Services variables and parameters in a script /* To use a variable in this script, first ensure that the variable has been added to * either the list contained in the ReadOnlyVariables property or the list contained in * the ReadWriteVariables property of this script task, according to whether or not your * code needs to write to the variable. To add the variable, save this script, close this instance of * Visual Studio, and update the ReadOnlyVariables and * ReadWriteVariables properties in the Script Transformation Editor window. * To use a parameter in this script, follow the same steps. Parameters are always read-only. * * Example of reading from a variable: * DateTime startTime = (DateTime) Dts.Variables["System::StartTime"].Value; * * Example of writing to a variable: * Dts.Variables["User::myStringVariable"].Value = "new value"; * * Example of reading from a package parameter: * int batchId = (int) Dts.Variables["$Package::batchId"].Value; * * Example of reading from a project parameter: * int batchId = (int) Dts.Variables["$Project::batchId"].Value; * * Example of reading from a sensitive project parameter: * int batchId = (int) Dts.Variables["$Project::batchId"].GetSensitiveValue(); * */ #endregion #region Help: Firing Integration Services events from a script /* This script task can fire events for logging purposes. * * Example of firing an error event: * Dts.Events.FireError(18, "Process Values", "Bad value", "", 0); * * Example of firing an information event: * Dts.Events.FireInformation(3, "Process Values", "Processing has started", "", 0, ref fireAgain) * * Example of firing a warning event: * Dts.Events.FireWarning(14, "Process Values", "No values received for input", "", 0); * */ #endregion #region Help: Using Integration Services connection managers in a script /* Some types of connection managers can be used in this script task. See the topic * "Working with Connection Managers Programatically" for details. * * Example of using an ADO.Net connection manager: * object rawConnection = Dts.Connections["Sales DB"].AcquireConnection(Dts.Transaction); * SqlConnection myADONETConnection = (SqlConnection)rawConnection; * //Use the connection in some code here, then release the connection * Dts.Connections["Sales DB"].ReleaseConnection(rawConnection); * * Example of using a File connection manager * object rawConnection = Dts.Connections["Prices.zip"].AcquireConnection(Dts.Transaction); * string filePath = (string)rawConnection; * //Use the connection in some code here, then release the connection * Dts.Connections["Prices.zip"].ReleaseConnection(rawConnection); * */ #endregion /// /// This method is called when this script task executes in the control flow. /// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure. /// To open Help, press F1. /// public void Main() { string cmdParams = $@"s3 cp {Dts.Variables["$Project::S3Bucket"].Value.ToString()}{Dts.Variables["User::currAWSS3File"].Value.ToString()} {Dts.Variables["User::FileProcessingPath"].Value.ToString()}{Dts.Variables["User::currAWSS3File"].Value.ToString()}"; /////////////////////////////////////////////////// /////////////BEGIN Copy File/////////////////////// /////////////////////////////////////////////////// ProcessStartInfo psi = new ProcessStartInfo("aws.exe", cmdParams); psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.CreateNoWindow = true; //psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; psi.UseShellExecute = false; System.Diagnostics.Process reg; reg = System.Diagnostics.Process.Start(psi); /////////////////////////////////////////////////// /////////////END Copy File///////////////////////// /////////////////////////////////////////////////// //MessageBox.Show(Dts.Variables["User::currAWSS3File"].Value.ToString()); Dts.TaskResult = (int)ScriptResults.Success; } #region ScriptResults declaration /// /// This enum provides a convenient shorthand within the scope of this class for setting the /// result of the script. /// /// This code was generated automatically. /// enum ScriptResults { Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure }; #endregion } }