使用 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)."
有没有办法在使用通配符的同时移动文件,或者有更好的方法来实现我想要做的事情?
提前致谢
-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
我需要将远程 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)."
有没有办法在使用通配符的同时移动文件,或者有更好的方法来实现我想要做的事情?
提前致谢
-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