none
Копирование файлов с FTP сервера RRS feed

Ответы

  • Это решение вполне для PowerShell. PowerShell умеет работать не только с объектами (хотя с ними конечно удобнее) но и с обычными утилитами командной строки. Встроенных средств для работы с FTP через WMI/.Net/COM в Windows нет, и учитывая то что протокол мягко говоря устарел - врядли появятся. Если есть желание реализовать задачу без использования встроенных утилит (зачем?!) - есть множество сторонних решений. Например вот NetCmdlets -  http://www.nsoftware.com/PowerShell/ предоставляет даже командлеты для работы с FTP.
    Но мне кажется что реализация с помощью ftp.exe будет выгоднее даже времени освоения командлета :)


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Помечено в качестве ответа Vasily GusevModerator 17 сентября 2009 г. 17:40
    27 августа 2009 г. 5:04
    Модератор
  • Скрипт, чтоб копировать


    $sourceuri = "ftp://server/folder/file.txt"
    $targetpath = "C:\folder\file.txt"
    $username = "test"
    $password = "test"

    # Создаем объект FTPWebRequest для обработки соединение с FTP-сервером
    $ftprequest = [System.Net.FtpWebRequest]::create($sourceuri)

    # устанавливаем соединение через учетку
    $ftprequest.Credentials =
        New-Object System.Net.NetworkCredential($username,$password)

    $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
    $ftprequest.UseBinary = $true
    $ftprequest.KeepAlive = $false

    # send the ftp request to the server
    $ftpresponse = $ftprequest.GetResponse()

    # get a download stream from the server response
    $responsestream = $ftpresponse.GetResponseStream()

    # create the target file on the local system and the download buffer
    $targetfile = New-Object IO.FileStream ($targetpath,[IO.FileMode]::Create)
    [byte[]]$readbuffer = New-Object byte[] 1024

    # loop through the download stream and send the data to the target file
    do{
        $readlength = $responsestream.Read($readbuffer,0,1024)
        $targetfile.Write($readbuffer,0,$readlength)
    }
    while ($readlength -ne 0)

    $targetfile.close()

    • Помечено в качестве ответа Sergey O O 9 октября 2009 г. 12:23
    9 октября 2009 г. 12:23

Все ответы

  • ftp.exe и в батник. PowerShell тут не нужен. Вот тут похожая тема: http://forum.sysfaq.ru/index.php?showtopic=25084 только там файлы наоборот надо на сервер закинуть. Но общая идея у вас будет такая же.
    [http://www.sysadmins.lv] As always enjoy the automation of tools within the Windows-based, .NET aware, WPF accessible, multi-processes on the same IP / Port usage, admin's automation tool, powershell.exe! © Flowering Weeds
    • Предложено в качестве ответа Vasily GusevModerator 20 августа 2009 г. 15:17
    • Отменено предложение в качестве ответа Sergey O O 21 августа 2009 г. 13:02
    20 августа 2009 г. 10:17
  • так вот хотелось сделать на PowerShell
    есть же какие-то Object чтоб выполнить выкачку с ftp
    21 августа 2009 г. 6:27
  • Это решение вполне для PowerShell. PowerShell умеет работать не только с объектами (хотя с ними конечно удобнее) но и с обычными утилитами командной строки. Встроенных средств для работы с FTP через WMI/.Net/COM в Windows нет, и учитывая то что протокол мягко говоря устарел - врядли появятся. Если есть желание реализовать задачу без использования встроенных утилит (зачем?!) - есть множество сторонних решений. Например вот NetCmdlets -  http://www.nsoftware.com/PowerShell/ предоставляет даже командлеты для работы с FTP.
    Но мне кажется что реализация с помощью ftp.exe будет выгоднее даже времени освоения командлета :)


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Помечено в качестве ответа Vasily GusevModerator 17 сентября 2009 г. 17:40
    27 августа 2009 г. 5:04
    Модератор
  • Скрипт, чтоб копировать


    $sourceuri = "ftp://server/folder/file.txt"
    $targetpath = "C:\folder\file.txt"
    $username = "test"
    $password = "test"

    # Создаем объект FTPWebRequest для обработки соединение с FTP-сервером
    $ftprequest = [System.Net.FtpWebRequest]::create($sourceuri)

    # устанавливаем соединение через учетку
    $ftprequest.Credentials =
        New-Object System.Net.NetworkCredential($username,$password)

    $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
    $ftprequest.UseBinary = $true
    $ftprequest.KeepAlive = $false

    # send the ftp request to the server
    $ftpresponse = $ftprequest.GetResponse()

    # get a download stream from the server response
    $responsestream = $ftpresponse.GetResponseStream()

    # create the target file on the local system and the download buffer
    $targetfile = New-Object IO.FileStream ($targetpath,[IO.FileMode]::Create)
    [byte[]]$readbuffer = New-Object byte[] 1024

    # loop through the download stream and send the data to the target file
    do{
        $readlength = $responsestream.Read($readbuffer,0,1024)
        $targetfile.Write($readbuffer,0,$readlength)
    }
    while ($readlength -ne 0)

    $targetfile.close()

    • Помечено в качестве ответа Sergey O O 9 октября 2009 г. 12:23
    9 октября 2009 г. 12:23
  • Отлично! Я и не подозревал что в .Net есть классы для работы с FTP.


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    9 октября 2009 г. 12:39
    Модератор