我有一个批处理脚本,它生成一个WinSCP上传脚本,用于将文件上传到SFTP位置。现在,当我通过命令提示符运行批处理文件时 - 它成功运行并加载它。我通过SSIS执行进程调用相同的任务 - 它成功运行并加载它。现在当我在SQL Agent上添加相同内容时 - 我尝试了以下两个选项:
通过以上两个选项,作业显示成功运行。但是文件没有上传!关于发生了什么的任何想法?
这是我的批处理脚本:
echo off
SET winscp=C:\"Program Files (x86)"\WinSCP\WinSCP.com
SET stagingDirectory=\\<staging path>\
SET scriptPath=\\<ScriptPath>\UploadScript.txt
SET ftpHost=xx.xx.xx.xx
SET ftpUser=user
SET ftpPass=password
SET fileName=Test.xlsx
SET ftpFlags=
@REM ftpFlags: -explicit
echo deleting uploadScript if it already exists
IF EXIST %scriptPath% del /F %scriptPath%
IF EXIST %scriptPath% exit 1
echo Generating WINSCP Upload Script
>>%scriptPath% echo option batch abort
>>%scriptPath% echo option confirm off
>>%scriptPath% echo open sftp://%ftpUser%:%ftpPass%@%ftpHost% %ftpFlags%
>>%scriptPath% echo option transfer binary
>>%scriptPath% echo put %stagingDirectory%%fileName% /
>>%scriptPath% echo close
>>%scriptPath% echo exit
echo Launching WINSCP upload
start /wait %winscp% /console /script=%scriptPath%
答案 0 :(得分:0)
您的变量似乎设置不正确。要使用路径中的空格和变量进行管理,您必须将整个路径或整个变量放在引号中。
即
set "winscp=C:\Program Files (x86)\WinSCP\WinSCP.com"
echo start "%winscp%"
:: output: start "C:\Program Files (x86)\WinSCP\WinSCP.com"
或
set winscp="C:\Program Files (x86)\WinSCP\WinSCP.com"
echo start %winscp%
:: output: start "C:\Program Files (x86)\WinSCP\WinSCP.com"
另一点,您必须检查此文件:UploadScript.txt,因为您的脚本会添加新行而不是重新生成文件。
将此行更改为>%scriptPath% echo option batch abort
而不是>>%...
啊,我没注意IF EXIST
。
答案 1 :(得分:0)
当您通过start
(为什么?)启动WinSCP时,退出代码不会传播到SSIS。所以,如果脚本失败,你永远不会学习。它很可能会失败。
您还应启用日志记录,以便查看错误。
您应该使用此代码将WinSCP退出代码传播到SSIS并启用日志记录:
%winscp% /log=\\<ScriptPath>\UploadScript.log /script=%scriptPath%
exit /b %ERRORLEVEL%
(请注意,winscp.com
没有/console
parameter)
无论如何,一个明显的问题是你没有指定expected SSH host key in the script。手动运行脚本时,可能已将密钥缓存在Windows帐户的注册表中。但是在SSIS下使用了一个不同的帐户,其主机密钥缓存可能是空的。您应该在脚本中添加-hostkey
switch to the open
command以使脚本独立于缓存。见Where do I get SSH host key fingerprint to authorize the server?
测试脚本时,将/ini=nul
参数添加到isolate the script from your configuration。
对于此提示和其他提示,在调试在SSIS下运行的WinSCP时,请参阅My script works fine when executed manually, but fails or hangs when run by Windows Scheduler, SSIS or other automation service. What am I doing wrong?
最后,请参阅WinSCP SFTP Task for SSIS。