WinSCP.NET сборка SynchronizeDirectories: загрузка файла ... прошла успешно, но произошла ошибка при установке разрешений и / или отметки времени
Я использую сборку WinSCP .NET в PowerShell для синхронизации файлов с сервером SFTP. Я использую следующий код для synchronization:
http://winscp.net/eng/docs/library_session_synchronizedirectories#powershell
Проблема в том, что когда этот скрипт синхронизирует файлы через загрузку в SFTP, он генерирует ошибку, хотя на самом деле загружает файл. Скрипт немедленно завершается со следующей ошибкой:
Загрузка C:FileSyncfilestest2.формат txt удалось
Разрешения /Reports / test2.тхт сохранил свои значения по умолчанию
Установка метки времени /Reports / test2.ошибка txt:
WinSCP.SessionRemoteException: загрузка файла ' test2.txt ' прошел успешно, но произошла ошибка при установке разрешений и/или отметки времени.
Если проблема не устранена, отключите настройку разрешений или сохранение метки времени. Кроме того, вы можете включить опцию "игнорировать ошибки разрешений".
--- >WinSCP.SessionRemoteException: В сервер не поддерживает эту операцию.
Код ошибки: 8
Сообщение об ошибке от сервера: SSHServerAPI.По SFTP.fxp_attrs
--- Конец внутренней трассировки стека исключений - - -
Я не нахожу никакого способа, как "игнорировать ошибку разрешения", как это предлагается в ошибках.
Скрипт не жалуется при выполнении синхронизации через загрузку файлов из SFTP.
Какая-нибудь помощь, пожалуйста?
1 ответ:
Ошибка задокументирована здесь:
https://winscp.net/eng/docs/message_preserve_time_perm
Я предполагаю, что вы не включили настройку разрешений (по умолчанию она выключена). Если вы это сделали, выключите его, установив
TransferOptions.FilePermissions
(смотрите ниже).Ваш сервер, вероятно, не поддерживает обновление временных меток удаленного файла. Это усложняет возможность локальной и удаленной синхронизации файлов с таким сервером, как временные метки. основные критерии Для сравнения файлов.
В общем случае нет смысла отключать обновление метки времени с синхронизацией, так как обновление в основном является неотъемлемой частью синхронизации.
Подсказка "игнорировать ошибки разрешений" существует для основных передач файлов. Как уже упоминалось, это не имеет смысла для синхронизации.
Так что все, что вы можете сделать, это:
Выключите обновление метки времени (набор
TransferOptions.PreserveTimestamp
);И заставьте WinSCP не учитывать временные метки, сравнивая файлы (set
criteria
параметрSession.SynchronizeDirectories
к[WinSCP.SynchronizationCriteria]::Size
илиNone
).Сомнительно, однако, как такая синхронизация имеет смысл.
$transferOptions = New-Object WinSCP.TransferOptions ... $transferOptions.FilePermissions = $Null # This is default $transferOptions.PreserveTimestamp = $False $synchronizationResult = $session.SynchronizeDirectories( [WinSCP.SynchronizationMode]::Remote, "d:\www", "/home/martin/public_html", $False, $False, [WinSCP.SynchronizationCriteria]::Size)