Bir WebDAV konumuna karşı bir dizin senkronizasyonu yazmak için WinSCP kullanmaya çalışıyorum. PowerShell'den böyle çalıştırıyorum:
.\WinSCP.exe -log=.\winscp.log -command "open davs://username:password@www.example.com/" "synchronize remote .\test-files /path/to/webdav/test-files" "exit"
Bu iyi çalışıyor. Dosyalar senkronize edilir. WebDAV dizinini sildim ve dosyaların orada oluşturduğunu görmek için yeniden çalıştırın.
Sorun, WinSCP'nin çıkması. önce senkronizasyon tamamlandı. Bunu, tamamlandıktan sonra geçerli saati kontrol ederek ve günlük dosyasındaki son zaman damgasını karşılaştırarak görebilirsiniz.
İşte sorunu gösteren bir PowerShell komutu:
& {
.\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
}
Çıktı:
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.
Gördüğünüz gibi, WinSCP hala komuttan çıktıktan 20 saniye sonra günlüğü yazıyordu. Bu pek mantıklı değil. WinSCP komutun tamamlanmadan önce çalışıp çalışmadığını nasıl belirleyebilir? WinSCP'yi durdurabilir ve komutun çıkmadan önce veya başarı veya başarısızlık bildirmeden önce bitmesini bekleyebilirim?