none
Conexión FTP con PowerShell RRS feed

  • 问题

  • Buenas a todos,

    Soy nuevo aquí, y trataré de aportar mi granito de arena cuando me sea posible. De momento lo que estoy tratando de realizar es un script que haga una serie de acciones trás una conexión FTP.

    Windows debe conectar con un Linux por medio de un FTP y mover y copiar una serie de archivos.

    Pues bien, las acciones que debe realizar el script ya las tengo, pero me gustaría saber que tipo de conexión podría hacer utilizando PS. No descargar ni subir archivos, lo que pregunto es si se puede establecer una conexión para que el script pueda realizar las demás acciones (teniendo en cuenta que el usuario del FTP tenga permiso total en los directorios de Linux).

    De antemano muchas gracias y un saludo.


    • 已编辑 Gensodos 2017年10月5日 9:36
    2017年10月5日 9:29

全部回复

  • La pregunta es poco especifica, pero claramente puedes, debes utilizar la clase llamada FtpWebRequest

    para subir un archivo por ejemplo:

    $ftp = [System.Net.FtpWebRequest]::Create("ftp://ftp.dominio.com/archivo.txt")
    $ftp = [System.Net.FtpWebRequest]$ftp
    $ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
    $ftp.Credentials = new-object System.Net.NetworkCredential("login@dominio.com","Contraseña")
    $ftp.UseBinary = $true
    $ftp.UsePassive = $true
    # read in the file to upload as a byte array
    $content = [System.IO.File]::ReadAllBytes("C:\ruta\archivo.txt")
    $ftp.ContentLength = $content.Length
    $rs = $ftp.GetRequestStream()
    $rs.Write($content, 0, $content.Length)
    $rs.Close()
    $rs.Dispose()


    Su "marcar como respuesta" es mi sueldo :D

    2017年10月5日 13:26
  • He estado probando con tu solución, y de antemano te doy las gracias.

    Es cierto que he sido poco preciso, igual así me explico mejor:

    Linux                                              Windows

    /source1/ -------------------------> C:\dest01\

    /source2/ -------------------------> C:\dest01\

    /source3/ -------------------------> C:\dest01\

    /historic1/

    /historic2/

    /historic3/

    (es un ejemplo porque en realidad son muchísimas rutas)

    Tengo que copiar de las rutas de Linux a las de Windows y después mover los archivos originales de Linux de los directorios "source" a "historic".

    Hasta el momento he probado bastante y llevo esto:

    #Linux source folders 
    $source1="/source1/"
    $source2="/source2/" 
    $source3="/source3/"     
    
    #ftp server 
    $ftp = "ftp://192.168.0.2/../../" 
    $user = "usu1" 
    $pass = "usu1"  
    
    $webclient = New-Object System.Net.WebClient 
    
    $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)  
    
    #Download from source1 folder 
    foreach($item in (Get-ChildItem $source1 "*")){ 
        $uri = New-Object System.Uri($ftp+$item.Name) 
        $webclient.DownloadFile($uri, $item.FullName) 
     }
    
    #Download from source2 folder 
    foreach($item in (Get-ChildItem $source2 "*")){  
        $uri = New-Object System.Uri($ftp+$item.Name) 
        $webclient.DownloadFile($uri, $item.FullName) 
     }
    
    #Download from source3 folder 
    foreach($item in (Get-ChildItem $source3 "*")){ 
        $uri = New-Object System.Uri($ftp+$item.Name) 
        $webclient.DownloadFile($uri, $item.FullName) 
     } 

    Pero me dice esto:

    Get-ChildItem : No se encuentra la ruta de acceso 'C:\source1\' porque no existe.
    En línea: 16 Carácter: 23

    Como ya dije antes, con el tema de PowerShell soy nuevo y agradezco cualquier ayuda que podáis dar.

    Un Saludo!




    • 已编辑 Gensodos 2017年10月9日 13:58
    2017年10月9日 13:55
  • Buen día,

    Sabras como se le agrega el puerto? ya que el que quiero configurar no tiene el default 21

    Gracias!

    2020年7月15日 17:23