首页 > 解决方案 > 使用 PowerShell 使用 Rename-FTPItem 在 FTP 上移动文件失败并显示“(550) 文件不可用”

问题描述

我需要将远程 FTP 服务器上的文件TestTested. 文件总是.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) 文件夹中。我认为通过使用变量来生成新的文件位置应该是可行的。

当我尝试这个时,我得到

重命名-FTPItem:使用“0”参数调用“GetResponse”的异常:“远程服务器返回错误:(550) 文件不可用(例如,找不到文件,无法访问)。”

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

提前致谢

标签: powershellftppsftp

解决方案


  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

推荐阅读