powershell - 使用 PowerShell 使用 Rename-FTPItem 在 FTP 上移动文件失败并显示“(550) 文件不可用”
问题描述
我需要将远程 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
) 文件夹中。我认为通过使用变量来生成新的文件位置应该是可行的。
当我尝试这个时,我得到
重命名-FTPItem:使用“0”参数调用“GetResponse”的异常:“远程服务器返回错误:(550) 文件不可用(例如,找不到文件,无法访问)。”
有没有办法在使用通配符时移动文件,或者有更好的方法来实现我想要做的事情?
提前致谢
解决方案
-NewName
应该只是一个路径,而不是一个 URL :$archivefolder = "/Tested"
(在 中
-Path
,URL 是可以接受的,但它是多余的,您指定会话已经使用$FtpSession
)您在文件夹路径和文件名之间缺少斜杠。
$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
推荐阅读
- security - 如何从您的 Web 应用程序通过电子邮件发送通知
- meshlab - 在 Meshlab 中测量对象尺寸?
- java - 休眠:不能删除外键
- r - 如何从一个在线资源下载和保存多个文件?
- time-series - 我想根据时间序列和预算来预测销售额。我应该使用什么算法?
- database - 哪些方法需要最少的资源?
- android - Jetpack Compose 使用参数浮动错误导航
- flutter - Flutter Web (Firebase Hosting) with Google Maps:m.gCO 不是一个函数
- linux - 如何设置 Ubuntu 以禁用每种类型的“GUI 中断”(弹出窗口、通知等)
- c - 如何在C中读取标准输入然后键盘输入?