2015-09-29 6 views
1

У меня есть пакетный скрипт, который создает сценарий загрузки WinSCP для загрузки файла в место SFTP. Теперь, когда я запускаю командный файл с помощью командной строки, он запускается успешно и загружает его. Я назвал ту же самую задачу SSIS Execute process - она ​​успешно работает и загружает ее. Теперь, когда я ставлю то же самое на агента SQL - я попытался следующие два варианта:Агент SQL Server для планирования SFTP с использованием WinSCP под SSIS

  1. Использование операционной системы (CmdExec) - cmd.exe/с «\ .bat»
  2. Добавлен пакет SSIS для SSISDB и добавили его в качестве рабочего шага.

С обоими вышеуказанными вариантами работа показала успешный прогон. Однако файл не загружается! Любые идеи о том, что происходит?

Вот моя партия сценарий:

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

Сообщение журнала в задании показывает, что он управляется некоторой учетной записью прокси. Но должно ли это иметь значение? Учетные записи SFTP жестко закодированы в пакетном скрипте, и в настоящее время он связан с моим идентификатором. Это мое понимание. –

ответ

0

При запуске WinSCP через start (почему?) Код выхода не передается в 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.


Для этого и других намеков, при отладке WinSCP под управлением служб SSIS, см 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.

+0

Это сработало! Я должен был добавить ключ хоста SSH к скрипту. Спасибо! –

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.

+0

Выполняется успешно и загружает файл, когда я запускаю командный скрипт через командную строку. Он только терпит неудачу, когда я добавляю его на агента SQL-сервера. –