Powershell WinSCP.NET程序集同步目录:上载文件。。。已成功,但设置权限和/或时间戳时出错

Powershell WinSCP.NET程序集同步目录:上载文件。。。已成功,但设置权限和/或时间戳时出错,powershell,winscp,winscp-net,Powershell,Winscp,Winscp Net,我正在PowerShell中使用WinSCP.NET程序集与SFTP服务器进行文件同步。我正在使用以下代码进行同步: 问题是,当这个脚本通过上传到SFTP同步文件时,它会生成错误,尽管它实际上上传了文件。脚本立即终止,出现以下错误: C:\FileSync\files\test2.txt上传成功 /Reports/test2.txt的权限保留为默认值 设置/Reports/test2.txt的时间戳失败: WinSCP.SessionRemoteException:上载文件“test2.txt

我正在PowerShell中使用WinSCP.NET程序集与SFTP服务器进行文件同步。我正在使用以下代码进行同步:

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

C:\FileSync\files\test2.txt上传成功

/Reports/test2.txt的权限保留为默认值

设置/Reports/test2.txt的时间戳失败:
WinSCP.SessionRemoteException:上载文件“test2.txt”成功,但在设置权限和/或时间戳时出错。
如果问题仍然存在,请关闭设置权限或保留时间戳。或者,您可以打开“忽略权限错误”选项。
--->WinSCP.SessionRemoteException:服务器不支持该操作。
错误代码:8
来自服务器的错误消息:SSHServerAPI.SFTP.fxp_attrs
---内部异常堆栈跟踪的结束---


我没有找到任何方法来“忽略权限错误”,正如错误中所建议的那样

通过从SFTP下载文件进行同步时,脚本不会抱怨


有什么帮助吗?

错误记录在这里:

  • 我假设您没有启用设置权限(默认情况下是关闭的)。如果确实如此,请通过设置(请参见下文)将其关闭

  • 您的服务器可能不支持更新远程文件的时间戳。这使得允许本地到远程同步文件与服务器(如时间戳)进行比较变得复杂

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

  • “忽略权限错误”提示适用于基本文件传输。如前所述,它对同步没有意义

因此,您所能做的就是:

  • 关闭更新时间戳(设置)

  • 并使WiSCP不考虑时间戳,当比较文件时(组到<>代码> [WiSCP.ActudioStimeStimult]::大小< /COD>或<代码> No.<代码> >

然而,这种同步的意义如何值得怀疑

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

马丁,非常感谢。你的代码更新对我有用。但有一个问题,为什么您认为这样的同步可能没有意义?嗯,基于文件大小的同步不是很可靠。例如,如果您只更改文件中的一个字节/字母,大小不会更改。Martin,我如何在服务器端解决此问题,以便相关用户确实有权更改文件权限/时间戳?这是一个相当广泛的问题。这取决于您使用的服务器。正如我答案开头的链接所说:在某些系统(如Linux)上,您需要是文件的所有者(写入权限不够)才能修改其权限或时间戳。-如果您需要更多详细信息,请提出适当的问题(关于-因为这不是编程问题)