Я пытаюсь использовать WinSCP для сценария синхронизации каталогов с местоположением WebDAV. Я запускаю это так из PowerShell:
.\WinSCP.exe -log=.\winscp.log -command "open davs://username:password@www.example.com/" "synchronize remote .\test-files /path/to/webdav/test-files" "exit"
Это отлично работает. Файлы синхронизируются. Я удалил каталог WebDAV и повторно запустил его, чтобы увидеть, что файлы составляют его там.
Проблема в том, что WinSCP завершает работу до завершения синхронизации. Вы можете убедиться в этом, проверив текущее время после его окончания и сравнив его с последней отметкой времени в файле журнала.
Вот команда PowerShell, которая демонстрирует проблему:
& {
.\WinSCP.exe -log=.\winscp.log -command "open davs://username:password@www.example.com/" "synchronize remote .\test-files /path/to/webdav/test-files" "exit"
Get-Date
Write-Host 'Exit code:' $LASTEXITCODE
Start-Sleep -Seconds 30
Get-Content -Tail 6 .\WinSCP.log
}
Выход:
Tuesday, April 17, 2018 20:41:52
Exit code: 0
. 2018-04-17 20:42:15.025 Copying finished: Transferred: 177, Elapsed: 0:00:20, CPS: 9/s
> 2018-04-17 20:42:15.025 Script: exit
. 2018-04-17 20:42:15.025 Script: Exit code: 0
. 2018-04-17 20:42:15.025 sess: Destroying session.
. 2018-04-17 20:42:15.025 sess: Closing connection.
. 2018-04-17 20:42:15.025 sess: Connection closed.
Как видите, WinSCP все еще записывал журнал через 20 секунд после выхода из команды. Это не имеет большого смысла. Как WinSCP может определить, сработала ли команда до ее завершения? Как я могу заставить WinSCP остановиться и дождаться завершения команды до ее выхода и до того, как она сообщит об успехе или неудаче?