darkoperator / Posh-SSH

PowerShell Module for automating tasks on remote systems using SSH
BSD 3-Clause "New" or "Revised" License
985 stars 227 forks source link

ssh.net .net 4.0 : Exception has been thrown by the target of an invocation---runtime error #228

Closed JuliusChangGitHub closed 5 years ago

JuliusChangGitHub commented 6 years ago

env : renci.ssh.net 2016.1.0; C# script in SSDT/SSIS 2013 pro

1) I try to debug it by setting breakpoints on any sftp line, then it crashed VS.

2) I got this error message while executing it. I have no clue what this error about .

Exception has been thrown by the target of an invocation.

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()


region Namespaces

using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.IO.Compression; using Renci.SshNet; using Renci.SshNet.Sftp; using System.IO;

endregion

namespace ST_dd3c1d092f844d81b850123c967415b5 { ///

/// 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

    /// <summary>
    /// 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.
    /// </summary>
    public void Main()
    {
        // TODO: Add your code here

//zip string pendingFolder = Dts.Variables["User::PendingFolder"].Value.ToString(); string zipFileName = Dts.Variables["User::ZipFileName"].Value.ToString(); ZipFile.CreateFromDirectory(pendingFolder, zipFileName, CompressionLevel.Optimal, false); //sftp string source = Dts.Variables["User::PGPFileName"].Value.ToString(); string destination = Dts.Variables["User::BrickRemoteLocation"].Value.ToString(); string host = Dts.Variables["User::BrickSite"].Value.ToString(); string username = Dts.Variables["User::BrickAccount"].Value.ToString(); string password = Dts.Variables["User::BrickPW"].Value.ToString(); ; int port = 22; //Port 22 is defaulted for SFTP upload

        using (SftpClient client = new SftpClient(host, port, username, password))
       {
           client.Connect();
           client.ChangeDirectory(destination);
           using (FileStream fs = new FileStream(source, FileMode.Open))
           {
               client.BufferSize = 4 * 1024;
               client.UploadFile(fs, Path.GetFileName(source));
           }
           client.Disconnect();
       } 
        Dts.TaskResult = (int)ScriptResults.Success;
    }

    #region ScriptResults declaration
    /// <summary>
    /// This enum provides a convenient shorthand within the scope of this class for setting the
    /// result of the script.
    /// 
    /// This code was generated automatically.
    /// </summary>
    enum ScriptResults
    {
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    };
    #endregion

}

}

darkoperator commented 6 years ago

I have 0 clue since the module is for PowerShell, I have never use C# Script or called it from MSSQL.

On Sep 17, 2018, at 5:43 PM, JuliusChangGitHub notifications@github.com wrote:

env : renci.ssh.net 2016.1.0; C# script in SSDT/SSIS 2013 pro

I try to debug it by setting breakpoints on any sftp line, then it crashed VS.

I got this error message while executing it. I have no clue what this error about .

Exception has been thrown by the target of an invocation.

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()

region Namespaces

using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.IO.Compression; using Renci.SshNet; using Renci.SshNet.Sftp; using System.IO;

endregion

namespace ST_dd3c1d092f844d81b850123c967415b5 { ///

/// 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() { // TODO: Add your code here //zip string pendingFolder = Dts.Variables["User::PendingFolder"].Value.ToString(); string zipFileName = Dts.Variables["User::ZipFileName"].Value.ToString(); ZipFile.CreateFromDirectory(pendingFolder, zipFileName, CompressionLevel.Optimal, false); //sftp string source = Dts.Variables["User::PGPFileName"].Value.ToString(); string destination = Dts.Variables["User::BrickRemoteLocation"].Value.ToString(); string host = Dts.Variables["User::BrickSite"].Value.ToString(); string username = Dts.Variables["User::BrickAccount"].Value.ToString(); string password = Dts.Variables["User::BrickPW"].Value.ToString(); ; int port = 22; //Port 22 is defaulted for SFTP upload

    using (SftpClient client = new SftpClient(host, port, username, password))

    { client.Connect(); client.ChangeDirectory(destination); using (FileStream fs = new FileStream(source, FileMode.Open)) { client.BufferSize = 4 * 1024; client.UploadFile(fs, Path.GetFileName(source)); } client.Disconnect(); } 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

} }

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/darkoperator/Posh-SSH/issues/228, or mute the thread https://github.com/notifications/unsubscribe-auth/AAf0HsBlfQ_FyOugnMkKWXFPLEA2SNmJks5ucBeAgaJpZM4WsxtF.

JuliusChangGitHub commented 6 years ago

sorry, I post it on wrong place