none
ftp power shell RRS feed

  • Вопрос

  • здравствуйте! необходимо закачать на ftp сервер зип-архив. подскажите как это реализовать с помощью пош???

    было реализованно так:

    ftp -s:d:\asu_synch\prikazyftp 213.171.3.138

    содержимое prikazyftp:

    login
    password
    binary
    put d:\asu_synch\prikazy.zip prikazy.zip
    bye

    раскажите как это реализовать в пош?

    14 сентября 2010 г. 11:06

Ответы


  • $url = ftp://$server

    ...

    пош выдает следующую ошибку:

    Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient
    At D:\ftp.ps1:15 char:15
    + $WC.UploadFile <<<< ($url,$localfile)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException


    Согласно документации http://msdn.microsoft.com/en-us/library/ms144229(VS.80).aspx

    параметр должен быть не путем, а полным URI, т.е. содержать имя файла:

    $url = "ftp://$server/prikazy.zip"


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа frol89 24 сентября 2010 г. 8:34
    15 сентября 2010 г. 13:05
    Модератор
  • Я думаю закрыть соединение можно командой:

    $clnt.Dispose()

     

    В Powershell все есть объекты. Поэтому работать с именами файлов легко:

    $Filename = dir file.ext

    $Filename.FullName - полное имя файла с путем

    $Filename.Name - имя файла с расширением

    $Filename.BaseName - имя файла без пути и без расширения

    $Filename.Extension  - расширение файла


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа frol89 24 сентября 2010 г. 8:26
    16 сентября 2010 г. 11:53
    Модератор
  • (Get-WmiObject Win32_MappedLogicalDisk | Where-Object {$_.ProviderName -like "\\192.168.1.26\install$"}).Namе

     


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа frol89 24 сентября 2010 г. 8:26
    17 сентября 2010 г. 14:41
    Модератор

Все ответы

  • я нашел вот такой скриптик но он не работает, какая здесь ошибка.

    $WC = new-object System.Net.WebClient

    $server = "213.171.3.138"

    $filename = "d:\asu_synch\prikazy.zip"

    $url = "ftp://$server"

    $WC.Proxy = $null

    $Wc.Credentials = New-Object System.Net.NetworkCredential("login", "password")

    $localfile = "d:\asu_synch\prikazy.zip"

    $WC.UploadFile($url,$localfile)

    необходимо архив d:\asu_synch\prikazy.zip отправить  на ftp сервер 213.171.3.138

    пош выдает следующую ошибку:

    Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient
    At D:\ftp.ps1:15 char:15
    + $WC.UploadFile <<<< ($url,$localfile)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException

    14 сентября 2010 г. 11:27
  • Посмотрите статью http://www.itcommunity.ru/blogs/sie-wl/archive/2009/10/19/80565.aspx
    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    15 сентября 2010 г. 9:34
    Модератор
  • в чем у меня ошибка не подскажите?? я начинающий в пош. не могу разобраться с фтп в пош.
    15 сентября 2010 г. 12:26

  • $url = ftp://$server

    ...

    пош выдает следующую ошибку:

    Exception calling "UploadFile" with "2" argument(s): "An exception occurred during a WebClient
    At D:\ftp.ps1:15 char:15
    + $WC.UploadFile <<<< ($url,$localfile)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException


    Согласно документации http://msdn.microsoft.com/en-us/library/ms144229(VS.80).aspx

    параметр должен быть не путем, а полным URI, т.е. содержать имя файла:

    $url = "ftp://$server/prikazy.zip"


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа frol89 24 сентября 2010 г. 8:34
    15 сентября 2010 г. 13:05
    Модератор
  • большое спасибо за помощь.
    16 сентября 2010 г. 8:52
  • я написал такую вот функцию, но здесь мне приходится вводить  в одну переменную только имяфайла с расширением , а в другую полностью имя файла с путем,соответственно $filename и $file. как организовать построение url чтобы избавиться от переменной filename.  как извлечь только имя файла  из переменной $file.

    Filename = dir file| select name  неработает

    Function Ftp 
    ($server, $file, $login, $pass, $filename)
    {if (ping $server){

    $url="ftp://$server/$filename"
    $clnt = new-object System.Net.WebClient
    $clnt.Credentials = New-Object System.Net.NetworkCredential($login, $pass)
    $clnt.UploadFile($url,$file)
    }
    else { "$server недоступен"}
    }


     Ftp -server 213.171.3.138 -file D:\3.ps1   -login server -pass 12345 -filename 3.ps1

    и еще.: можно с помощью System.Net.WebClient закрыть соединение?

    16 сентября 2010 г. 10:27
  • Я думаю закрыть соединение можно командой:

    $clnt.Dispose()

     

    В Powershell все есть объекты. Поэтому работать с именами файлов легко:

    $Filename = dir file.ext

    $Filename.FullName - полное имя файла с путем

    $Filename.Name - имя файла с расширением

    $Filename.BaseName - имя файла без пути и без расширения

    $Filename.Extension  - расширение файла


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа frol89 24 сентября 2010 г. 8:26
    16 сентября 2010 г. 11:53
    Модератор
  • спасибо!!

    и еще есть проблема в следующем  коде:

    if (test-path \\192.168.1.26\install$)
    {"найден сетевой диск, производится отключение"
    start-sleep 4
    net use  Z:  /delete   }
    else {"сетевой диск не подключен"}

    если я пишу вместо Z: \\192.168.1.26\install$ то пишит что  диск успешно удален , а на самом деле  он не удалился, а вот когда использую  z:  то все проходит гладко. как можно узнать  букву подключенного сетевого диска по его удаленному имени, например как мне узнать  букву \\192.168.1.26\install$?

    17 сентября 2010 г. 7:19
  • (Get-WmiObject Win32_MappedLogicalDisk | Where-Object {$_.ProviderName -like "\\192.168.1.26\install$"}).Namе

     


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа frol89 24 сентября 2010 г. 8:26
    17 сентября 2010 г. 14:41
    Модератор
  • Большое спасибо!
    20 сентября 2010 г. 12:15
  • Помечайте ответы, которые вам помогли - пригодится другим.


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    21 сентября 2010 г. 8:43
    Модератор
  • спасибо за ответы. не поможете еще с одной проблемкой?

    есть скрипт копирования из одной папки в другую, но необходимо его применить для нескольких папок, я написал вот так:


    $dest1 = "C:\1\1"

    $dest2= "D:\2\1" 

    $c=0
    foreach ($file in (get-childitem $dest1  ))
    {
     $Files= $file.fullname
     $datafile= $file.lastwritetime
    "обрабатываю $Files " >> $logname
      $dest1Todest2=$file.fullname.replace($dest1,$dest2)
     "$dest1todest2 !!!!!!!!!!!!!!!!!!!!!!!!" >> C:\$logname
    if ((test-path -path $dest1Todest2) -ne $true)
      {
         "$file в $dest1todest2 не сущ" >> C:\$logname

    Copy-Item $File.FullName $dest1Todest2 -recurse -passthru

    }
    else {
     "$file существует в $dest1todest2" >> C:\$logname
    if ((dir $file.fullname).lastwritetime -gt (dir $dest1todest2).lastwritetime)

    { "$datafile новее" >> C:\$logname

    copy-item $file.fullname $dest1Todest2 -recurse
    }
    else
    { "_______________Файлы одинаковые. Обновление не требуется" >> C:\$logname}

    }
    if ($file -eq 0) { $c=$c+1
    if ($c=1) { $dest1=c:\1\2
    "1"
                $dest2=D:\2\2}
    if ($c=2) { $dest1=c:\1\3
                $dest2=D:\2\3}
    if ($c=3) { $dest1=c:\1\4
                $dest2=D:\2\4}
    if ($c=4) { "end"}
    }

    }

    последний блок не правильный видимо, как цикл применить для нескольких папок??

    24 сентября 2010 г. 8:32
  • Я не понял, какую задачу вы решаете, но возможно вся нужная вам функциональность есть у стандартной утилиты robocopy.exe

    Либо опишите задачу подробнее.

     


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    27 сентября 2010 г. 13:28
    Модератор
  •  

    вот функция отключения сетевого диска

    function ip ($path){
    if (test-path $path)
    {"найден сетевой диск, производится отключение"
    start-sleep 4
    $f = (Get-WmiObject Win32_MappedLogicalDisk | Where-Object {$_.ProviderName -like $path}).name
    net use  $f  /delete   }
    else {"сетевой диск не подключен"}
    "$f"
    }
    ip -path \\192.168.1.26\install$

    а как сделать так чтобы отключение сетевого диска производилось в любом случае даже если есть открытые файлы и приложения находящиеся на нем?

    4 октября 2010 г. 8:53