在 PowerShell 中使用 WinSCP .NET 程序集时“上传文件“...”成功,但设置权限和/或时间戳时发生错误”

问题描述 投票:0回答:2
使用“0”个参数调用“Check”时出现异常:“上传文件‘2019-06-11.zip’
成功,但设置权限和/或时发生错误
时间戳。
如果问题仍然存在,请关闭设置权限或保留时间戳。
或者,您可以打开“忽略权限错误”选项。
没有权限。
错误代码:3
来自服务器的错误消息:该服务器不支持修改操作
文件属性。”
行:12 字符:84
+ $session.PutFiles("D:\Users in\*.zip", "/Outbox/").Check <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

将文件从 Window Server 传输到 Linux 时,我不断收到上述错误文件。我在使用 WinSCP GUI 时也遇到了同样的错误。我问了MFT团队,他们没有任何设置许可。以下是我的文件传输脚本和我正在使用的软件的一些介绍版本。我因脚本或软件版本太旧而错过的任何内容?我很快就会更新服务器,但还得再等两年。此任务将被设置为调度程序,每天将文件传输到 MFT 服务器。

软件版本:

  1. 使用.NET 4.0
  2. 使用PowerShell v2.0
  3. Windows Server 2008
  4. private.ppk
    WinSCPNet.dll
    WinSCP.exe
    放在同一文件夹中
#Load WinSCP .NET assembly
Add-Type -Path "D:\Users\WinSCPnet.dll" -Verbose

$session = New-Object WinSCP.Session
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = "[Linux server IP]"
$sessionOptions.UserName = "[username]"
$sessionOptions.PortNumber = "[linux port number]"
$sessionOptions.Password = ""
$sessionOptions.SshPrivateKeyPath = "D:\Users\bin.ppk"
$sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 ....="

try {
    # Open the WinSCP.Session object using the WinSCP.SessionOptions object.
    $session.Open($sessionOptions)

    # Upload
    $session.PutFiles("D:\Users\bin\*.zip", "/Outbox/").Check()
} finally {
    # Disconnect, clean up
    $session.Dispose()
}
linux powershell sftp winscp winscp-net
2个回答
6
投票

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

您的服务器不支持更新上传的远程文件的时间戳。所以你需要指示 WinSCP 不要尝试它:

$transferOptions = New-Object WinSCP.TransferOptions
...
$transferOptions.PreserveTimestamp = $False

$session.PutFiles("D:\Users\bin\*.zip", "/Outbox/", $False, $transferOptions).Check()

0
投票

即使我更新了代码,我仍然收到错误:

这是我的代码:

 # Load WinSCP .NET assembly
 Add-Type -Path "WinSCPnet.dll"

 # Setup session options
 $transferOptions = New-Object WinSCP.TransferOptions  
 $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
  Protocol = [WinSCP.Protocol]::Sftp
  HostName = = "[Windows server]"
  UserName = "[username]"
  Password = "[password]"
  SshHostKeyFingerprint = "ssh-rsa 1024 ..."
 }

 $session = New-Object WinSCP.Session

try
{
  # Connect
  $session.Open($sessionOptions)
  $transferOptions.PreserveTimestamp = $False

  # Upload
  $session.PutFiles("D:\Users\bin\*.zip", "/Outbox/", $False, 
$transferOptions).Check()
    }
finally
{
  # Disconnect, clean up
  $session.Dispose()
}
© www.soinside.com 2019 - 2024. All rights reserved.