使用PsFtp将文件上载到FTP Powershell

使用PsFtp将文件上载到FTP Powershell,powershell,upload,ftp,Powershell,Upload,Ftp,我一直在为这个问题绞尽脑汁,似乎无法解决它。我正在尝试使用PSFTP将文件上载到FTP 我正在使用的脚本: #------------------------------------------------------ #local variables $ftp_server = "SERVERNAME" $ftp_path = "/FTPPATH/PATH" $local = "C:\ftp\" $local_in = Join-Path $local "In" $local_out = J

我一直在为这个问题绞尽脑汁,似乎无法解决它。我正在尝试使用PSFTP将文件上载到FTP

我正在使用的脚本:

#------------------------------------------------------
#local variables

$ftp_server = "SERVERNAME"
$ftp_path = "/FTPPATH/PATH"
$local = "C:\ftp\"
$local_in = Join-Path $local "In"
$local_out = Join-Path $local "Out"
$session = "my_ftp_session"

# set up credentials object
$username = "FFandP"
$password = Get-Content "$local_out\Credentials.txt" | ConvertTo-SecureString -AsPlainText -Force 
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password

Set-FTPConnection -Server $ftp_server -Credentials $cred -Session $session -KeepAlive -confirm -UseBinary

Get-ChildItem -Path $local_out |
% {

$ftp_file = "$ftp_path/$($_.Name)" # determine item fullname
Add-FTPItem -Path $ftp_file -LocalPath $_.FullName -Session $session -
}

# -------------------------------------------------
我收到的错误是:

Add-FTPItem : Exception calling "GetResponse" with "0" argument(s): "The remote server     returned an error: (550) File 
unavailable (e.g., file not found, no access)."
At line:22 char:1
+ Add-FTPItem -Path $ftp_file -LocalPath $_.FullName -Session $session
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Add-FTPItem
我试着自己运行Add-FTPitem命令,但是我得到了相同的错误

我可以使用FileZilla上传到FTP。我还尝试删除变量并使用硬编码路径;我也犯了同样的错误

有什么想法吗?

更改块

Get-ChildItem -Path $local_out | %{ .... }
一行

Get-ChildItem -Path $local_out |  Add-FTPItem  -Path $ftp_path

我花了一点时间来解决这个问题,但这是我的解决方案(我也有同样的问题)

使用Add FTPItem时,-Path参数必须不包含文件名本身

Add-FTPItem 
 -Path "ftp://SomeServer/SomeDir/"
 -LocalPath "C:\SomeFilename.ext"
 -Session $session
因此,在您的示例中,应该是:

Add-FTPItem -Path $ftp_path -LocalPath $_.FullName -Session $session

文件名将添加到远程FTP路径。如果您不想使用相同的名称,您必须首先在本地重命名该文件,或者在之后远程重命名。

在@Josh的评论中的答案为我解决了这个问题。使用-Overwrite参数运行addftpitem

Add-FTPItem -Path $remotePath -LocaPath $myPath -Overwrite

对我来说,解决这个问题的方法是指定“-Overwrite”参数。当Overwrite设置为false(默认值)时,它将首先检查该文件是否存在,当该文件不存在时,cmdlet将抛出一个错误,因为未正确处理该事件。您可以通过指定“-Verbose”参数来了解其中的一些情况。