Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 通过SSI连接到SFTP_Ssis_Sftp_Winscp_Ssis 2012 - Fatal编程技术网

Ssis 通过SSI连接到SFTP

Ssis 通过SSI连接到SFTP,ssis,sftp,winscp,ssis-2012,Ssis,Sftp,Winscp,Ssis 2012,我正试图通过SSIS包连接到SFTP服务器。包在.txt文件中使用以下连接字符串执行WinSCP: open sftp://username:fc$#6444@example.com:22 但是,软件包不断出现故障,无法连接。这与密码中的特殊字符有关吗 如果替换字符串,我可以连接到不同的SFTP,因此我知道这一定与上面的语法有关。我尝试在字符串周围加上双引号,如下所示,但没有成功: open "sftp://username:fc$#6444@example.com:22" 我最近的一个工作

我正试图通过
SSIS
包连接到
SFTP
服务器。包在
.txt
文件中使用以下连接字符串执行
WinSCP

open sftp://username:fc$#6444@example.com:22
但是,软件包不断出现故障,无法连接。这与密码中的特殊字符有关吗

如果替换字符串,我可以连接到不同的SFTP,因此我知道这一定与上面的语法有关。我尝试在字符串周围加上双引号,如下所示,但没有成功:

open "sftp://username:fc$#6444@example.com:22"

我最近的一个工作项目也需要这样做。我们在SSIS脚本任务中使用了WinSCP.NET程序集,因为这也是WinSCP推荐的在SSIS中使用WinSCP实现SFTP的方法

请参阅本指南-。它引导您完成安装和设置,还包含工作示例代码(当然,在您根据需要更改脚本之后!)

下面是引用
WinSCPnet.dll
程序集后的示例代码

使用系统;
使用Microsoft.SqlServer.Dts.Runtime;
使用Microsoft.SqlServer.Dts.Tasks.ScriptTask;
使用System.AddIn;
使用WinSCP;
名称空间ST_5a30686e70c04c5a8a93729fd90b8c79.csproj
{
[附件(“ScriptMain”,Version=“1.0”,Publisher=“”,Description=“”)]
公共分部类ScriptMain:VSTARTScriptObjectModelBase
{
公共图书馆
{
//设置会话选项
SessionOptions SessionOptions=新SessionOptions
{
协议=协议.Sftp,
//要设置这些变量,请转到SSIS>变量。
//要使其可从脚本任务访问,请在任务的关联菜单中,
//选择编辑。在脚本页面上的脚本任务编辑器中,选择ReadOnlyVariables,
//并勾选以下属性。
主机名=(字符串)Dts.Variables[“User::HostName”].Value,
UserName=(字符串)Dts.Variables[“User::UserName”].Value,
密码=(字符串)Dts.Variables[“User::Password”].Value,
SshHostKeyFingerprint=(字符串)Dts.Variables[“User::SshHostKeyFingerprint”]。值
};
尝试
{
使用(会话=新会话())
{
//由于WinSCP.NET程序集必须存储在GAC中才能与SSI一起使用,
//如果使用非默认位置,则需要显式设置WinSCP.exe的路径。
session.ExecutablePath=@“C:\winscp\winscp.exe”;
//连接
会议。公开(会议选项);
//上传文件
TransferOptions TransferOptions=新的TransferOptions();
transferOptions.TransferMode=TransferMode.Binary;
转让操作结果转让结果;
transferResult=session.PutFiles(@“d:\toupload\*”,“/home/user/”,false,transferOptions);
//有什么差错吗
transferResult.Check();
//打印结果
bool=false;
foreach(TransferVentargs转入transferResult.Transfers)
{
Dts.Events.FireInformation(0,null,
Format(“上传{0}成功”,transfer.FileName),
null,0,再次引用);
}
}
Dts.TaskResult=(int)dtsesecresult.Success;
}
捕获(例外e)
{
Dts.Events.FireError(0,null,
Format(“使用WinSCP上载文件时出错:{0}”,e),
空,0);
Dts.TaskResult=(int)dtsesecresult.Failure;
}
}
}
}

安装WinSCP,然后创建一个文件夹,用于从客户端获取文件或放置文件。然后打开执行流程任务,然后转到表达式选项卡,并使用以下代码设置可执行文件参数(请相应更改)。 在记事本中编写此代码,并在路径C:\path\to\winscp.txt处另存为winscp.txt

打开sftp://Host_Name:Password@apacsftp01.mftservice.com/-hostkey=“ssh rsa 2048 xxxxxxxxxx…=”

get-delete/home/client/Share/MediaData/Media_file.xlsx


退出

/log=c:\path\to\winscp.log
添加到winscp命令行,并显示日志。@Martin Prikryl。。我们也可以使用上述方法从SFTP服务器获取文件吗?我使用下面的语句从WinSCP文件夹“my_data”transferResult=session.GetFiles(“/my_data/ABC_EMP*”,@“G:\TestFolder\Download\”)获取文件;它给了我一条错误消息,比如“异常已被调用的目标抛出”suggest@vikrantrana是的,你可以。如果有问题,请发布新问题,并确保包含实际的异常消息(“异常已由调用的目标引发”)或会话日志文件(
session.SessionLogPath
)。另请参阅WinSCP文章或堆栈溢出问题。