none
Powershell upload files to ftp RRS feed

  • Вопрос

  • Есть скрипт который копирует на ftp последний созданный файл в папке.

    Но вылетает ошибка при заливке файла:

    "Exception calling "UploadFile" with "2" argument(s): "The remote server returned an error: (550) File unavailable (e.g., file not found, no access).

    At D:\BAK\UploadFTP.ps1:20 char:9
    +         $webclient.UploadFile($ftp + $File, $LocalFile)"

    Подскажите, что исправить? Доступ на папку полный, авторизация проходит.

    $a = (Get-Host).UI.RawUI
    $a.WindowTitle = "Sync Folder To Ftp"
         
    $ftp = "ftp://z.x.c.v/BAK/TEST/"
    $localDirectory = "D:\BAK\TEST\"
    $user = "1111"
    $pass = "1111"
         
    $webclient = New-Object System.Net.WebClient
    $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)
    
    $Files = Get-ChildItem $localDirectory | Where {$_.LastWriteTime -gt (Get-Date).AddDays(-1)} 
    foreach ($File in $Files)
        {
            $LocalFile = $File.FullName
    
            Write-Host "Getting $File from $localDirectory" -Foreground "Red"
    
            $webclient.UploadFile($ftp + $File, $LocalFile) 
    
            Write-Host "Puting $File to $ftp" -Foreground "Yellow"
        } 
         
    Write-Host "Finished Sync to $ftp" -Foreground "Green"


    • Изменено borodkun 3 августа 2016 г. 11:47
    3 августа 2016 г. 11:46

Ответы

  • Нет к сожалению но разобрался. Дело не в ftp было.Так как написано выше какой-то баг. Если закинуть пустой файл с таким же именем, то пишет в ту же папку.

    Если добавить -Overwrite все отлично работает. Разобрался. Всем спасибо

    • Помечено в качестве ответа borodkun 4 августа 2016 г. 8:13
    4 августа 2016 г. 7:52

Все ответы

  • Используйте PowerShell FTP Client Module - https://gallery.technet.microsoft.com/scriptcenter/PowerShell-FTP-Client-db6fe0cb

    Import-Module PSFTP 
    
    $a = (Get-Host).UI.RawUI
    $a.WindowTitle = "Sync Folder To Ftp"
         
    $ftp = "ftp://z.x.c.v"
    $fdir = "/BAK/TEST/"
    $localDirectory = "D:\BAK\TEST\"
    $user = "1111"
    $pass = ConvertTo-SecureString '1111' -AsPlainText -Force
    
    $cred = New-Object System.Management.Automation.PSCredential($user,$pass)
    Set-FTPConnection -Credentials $cred -Server ftp://ftp.server.org -Session MySession -UsePassive 
    $Session = Get-FTPConnection -Session MySession 
    
    
    $Files = Get-ChildItem $localDirectory | Where {$_.LastWriteTime -gt (Get-Date).AddDays(-1)} 
    foreach ($File in $Files)
    {
        $LocalFile = $File.FullName
        Write-Host "Getting $File from $localDirectory" -Foreground "Red"
    
        Add-FTPItem -Session $Session -Path $fdir -LocalPath $LocalFile
    
        Write-Host "Puting $File to $ftp" -Foreground "Yellow"
    } 
         
    Write-Host "Finished Sync to $ftp" -Foreground "Green"

    3 августа 2016 г. 12:14
  • Сделал, но все равно вылетает ошибка
    WelcomeMessage          : 230 Logged on
                              
    ExitMessage             : 221 Goodbye
                              
    IsFromCache             : False
    IsMutuallyAuthenticated : False
    ContentType             : 
    
    Getting 02T173855.vbk from D:\BAK\TEST\
    Add-FTPItem : Exception calling "GetResponse" with "0" argument(s): "The remote server returned an error: (550) File unavailable (e.g., file not found, no acc
    ess)."
    At D:\BAK\FTPBackup.ps1:23 char:5
    +     Add-FTPItem -Session $Session -Path $fdir -LocalPath $LocalFile
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
        + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Add-FTPItem

    3 августа 2016 г. 13:15
  • Попробуйте убрать -UsePassive  и что за ftp сервер? Путь на ftp "/BAK/TEST/" точно существует?


    • Изменено Kazun 3 августа 2016 г. 13:26
    3 августа 2016 г. 13:22
  • FileZilla Server и пусть существует.

    Вот логи фтп:

    230 Logged on
    OPTS utf8 on
    202 UTF8 mode is always enabled. No need to send this command.
    PWD
    257 "/" is current directory.
    TYPE A
    200 Type set to A
    PORT 185,110,57,7,254,92
    200 Port command successful
    LIST
    150 Opening data channel for directory listing of "/"
    425 Can't open data connection for transfer of "/"
    disconnected.


    • Изменено borodkun 3 августа 2016 г. 13:39
    3 августа 2016 г. 13:39
  • Если находитесь за NAT, то корректно настройте сервер - https://wiki.filezilla-project.org/Network_Configuration
    3 августа 2016 г. 13:49
  • Спасибо. Так почему же тогда пускает через tcmd и все заливает и сливает :( ?
    3 августа 2016 г. 14:47
  • 1. Что такое tcmd?

    2. Покажите сессию из tcmd, как загружаете файл и листинга.

    3. Если есть возможность, можете предоставить тестовый аккаунт для доступа.


    • Изменено Kazun 3 августа 2016 г. 15:41
    3 августа 2016 г. 15:40
  • Нет к сожалению но разобрался. Дело не в ftp было.Так как написано выше какой-то баг. Если закинуть пустой файл с таким же именем, то пишет в ту же папку.

    Если добавить -Overwrite все отлично работает. Разобрался. Всем спасибо

    • Помечено в качестве ответа borodkun 4 августа 2016 г. 8:13
    4 августа 2016 г. 7:52
  • Нет к сожалению но разобрался. Дело не в ftp было.Так как написано выше какой-то баг. Если закинуть пустой файл с таким же именем, то пишет в ту же папку.

    Если добавить -Overwrite все отлично работает. Разобрался. Всем спасибо

    Раз проблема решена, отметьте сообщение -  "Пометить как ответ".
    4 августа 2016 г. 8:03