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 2

1 ответ:

Ошибка задокументирована здесь:
https://winscp.net/eng/docs/message_preserve_time_perm

  • Я предполагаю, что вы не включили настройку разрешений (по умолчанию она выключена). Если вы это сделали, выключите его, установив TransferOptions.FilePermissions (смотрите ниже).

  • Ваш сервер, вероятно, не поддерживает обновление временных меток удаленного файла. Это усложняет возможность локальной и удаленной синхронизации файлов с таким сервером, как временные метки. основные критерии Для сравнения файлов.

  • В общем случае нет смысла отключать обновление метки времени с синхронизацией, так как обновление в основном является неотъемлемой частью синхронизации.

  • Подсказка "игнорировать ошибки разрешений" существует для основных передач файлов. Как уже упоминалось, это не имеет смысла для синхронизации.

Так что все, что вы можете сделать, это:

Сомнительно, однако, как такая синхронизация имеет смысл.

$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)