使用 Rename-FTPItem 使用 PowerShell 在 FTP 上移动文件失败并显示“(550) 文件不可用”

Moving files on FTP with PowerShell using Rename-FTPItem fails with "(550) File unavailable"

我需要将远程 FTP 服务器上的文件从 Test 移动到 Tested。文件始终为 .csv,但名称会随着时间戳的变化而变化。使用 PSFTP 模块,我写了下面的

$FtpServer = "ftp://myftpserver.com/"
$User = "myusername"
$PWD = "mypassword"
$Password =  ConvertTo-SecureString $Pwd -AsPlainText -Force

$FtpCredentials = New-Object System.Management.Automation.PSCredential ($User, $Password)

Set-FTPConnection -Credentials $FtpCredentials -Server $FtpServer -Session MyFtpSession -UsePassive 

$FtpSession = Get-FTPConnection -Session MyFtpSession

$ServerPath = "ftp://myftpserver.com/Test"
$fileList   = Get-FTPChildItem -Session $FtpSession -Path $ServerPath -Filter *.csv
$archivefolder = "ftp://myftpserver.com/Tested"

foreach ($element in $fileList ) 
{
  $filename = $ServerPath  + $element.name
  $newfilename = $archivefolder  + $element.name

  Rename-FTPItem -Path $filename -NewName $newfilename -Session $FtpSession
}

文件确实存在于 Test 文件夹中,但尚未存在于存档 (Tested) 文件夹中。我想通过使用变量来生成新文件位置应该是什么,这会起作用。

当我尝试这个时,我得到

Rename-FTPItem : Exception calling "GetResponse" with "0" argument(s): "The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."

有没有办法在使用通配符的同时移动文件,或者有更好的方法来实现我想要做的事情?

提前致谢

  1. -NewName 应该只是一个路径,而不是 URL:

    $archivefolder = "/Tested"
    

    (在-Path中,URL是可以接受的,但它是多余的,您指定的会话已经使用$FtpSession

  2. 文件夹路径和文件名之间缺少斜杠。

    $filename = $ServerPath  + "/" + $element.name
    
    $newfilename = $archivefolder  + "/" + $element.name
    

所以你应该这样调用 Rename-FTPItem

Rename-FTPItem -Path "ftp://myftpserver.com/Test/file.txt" -NewName "/Tested/file.txt" -Session $FtpSession

或者像这样:

Rename-FTPItem -Path "/Test/file.txt" -NewName "/Tested/file.txt" -Session $FtpSession