WinSCP .NET 程序集 SynchronizeDirectories:上传文件 ... 成功,但设置权限时出错 and/or 时间戳

WinSCP .NET assembly SynchronizeDirectories: Upload of file ... was successful, but error occurred while setting the permissions and/or timestamp

我在 PowerShell 中使用 WinSCP .NET 程序集与 SFTP 服务器进行文件同步。我正在使用以下代码进行同步:
http://winscp.net/eng/docs/library_session_synchronizedirectories#powershell

问题是,当此脚本通过上传到 SFTP 同步文件时,它会生成错误,尽管它实际上上传了文件。脚本立即终止并出现以下错误:

Upload of C:\FileSync\files\test2.txt succeeded

Permissions of /Reports/test2.txt kept with their defaults

Setting timestamp of /Reports/test2.txt failed:
WinSCP.SessionRemoteException: Upload of file 'test2.txt' was successful, but error occurred while setting the permissions and/or timestamp.
If the problem persists, turn off setting permissions or preserving timestamp. Alternatively you can turn on 'Ignore permission errors' option.
---> WinSCP.SessionRemoteException: The server does not support the operation.
Error code: 8
Error message from server: SSHServerAPI.SFTP.fxp_attrs
--- End of inner exception stack trace ---


我没有找到任何方法来按照错误中的建议“忽略权限错误”。

通过从 SFTP 下载文件进行同步时,脚本不会报错。

有什么帮助吗?

错误记录在此处:
https://winscp.net/eng/docs/message_preserve_time_perm

  • 我假设您没有启用设置权限(默认情况下是关闭的)。如果这样做,请通过设置 TransferOptions.FilePermissions(见下文)将其关闭。

  • 您的服务器可能不支持更新远程文件的时间戳。这使得允许针对此类服务器进行文件的本地到远程同步变得复杂,因为时间戳是 primary criteria 来比较文件。

  • 一般来说,关闭同步更新时间戳是没有意义的,因为更新基本上是同步的一个组成部分。

  • "Ignore permission errors" 的提示用于基本文件传输。如前所述,同步没有意义。

所以你所能做的就是:

这种同步有何意义值得怀疑。

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