Cómo subir archivos con FTP en PowerShell

  1. Usa el objeto System.Net.WebClient para subir archivos con FTP en PowerShell
  2. Usa el objeto FtpWebRequest para subir archivos con FTP en PowerShell
  3. Subir múltiples archivos con FTP en PowerShell
Cómo subir archivos con FTP en PowerShell

FTP (Protocolo de Transferencia de Archivos) es un protocolo de red estándar utilizado para transferir archivos entre un cliente y un servidor en una red de computadoras. Un servidor FTP es una solución común para facilitar las transferencias de archivos a través de Internet.

Podemos subir archivos a un servidor FTP y descargar archivos de un servidor FTP. PowerShell es una herramienta de scripting que puede automatizar tareas de subida y descarga FTP.

Este tutorial te enseñará a subir archivos a un servidor FTP utilizando PowerShell.

Usa el objeto System.Net.WebClient para subir archivos con FTP en PowerShell

Podemos usar el objeto System.Net.WebClient para subir archivos a un servidor FTP. Envía o recibe datos de cualquier recurso local, intranet o de Internet identificado por una URI.

Primero, necesitamos crear una instancia de un objeto System.Net.WebClient y asignarlo a una variable $WebClient. El cmdlet New-Object crea una instancia de un objeto .NET Framework o COM.

$WebClient = New-Object System.Net.WebClient

Ahora, especifiquemos un archivo y una URI FTP. Usa un nombre de usuario y una contraseña válidos para el servidor. Entonces, reemplaza el valor en $FTP con tus detalles FTP.

$File = "C:\New\car.png"
$FTP = "ftp://ftp_user:ftp_password@ftp_host/car.png"

Luego crea un objeto FtpWebRequest y configúralo como se muestra a continuación. La propiedad Credentials se usa para especificar las credenciales para conectarse a un servidor FTP.

La propiedad UseBinary establece un valor booleano para especificar el tipo de datos para las transferencias de archivos. True indica que los datos a ser transferidos son binarios, y false indica que los datos a ser transferidos son texto.

Este método utiliza un modo de transferencia binaria para transferir archivos sin modificación o conversión. Como resultado, el mismo archivo en la computadora de origen será subido al servidor.

$FTPRequest = [System.Net.FtpWebRequest]::Create("$remote_file")
$FTPRequest = [System.Net.FtpWebRequest]$FTPRequest
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
$FTPRequest.Credentials = New-Object System.Net.NetworkCredential($username, $password)
$FTPRequest.UseBinary = $true
$FTPRequest.UsePassive = $true

# Read the file for upload
$FileContent = gc -en byte $local_file
$FTPRequest.ContentLength = $FileContent.Length

# Get stream request by bytes
$run = $FTPRequest.GetRequestStream()
$run.Write($FileContent, 0, $FileContent.Length)

# Cleanup
$run.Close()
$run.Dispose()

Al usar un objeto FtpWebRequest para subir un archivo a un servidor, debemos escribir el contenido del archivo en el flujo de solicitud obtenido llamando al método GetRequestStream.

Debemos escribir en el flujo y cerrarlo antes de enviar la solicitud.

Subir múltiples archivos con FTP en PowerShell

A veces, podríamos necesitar subir múltiples archivos a un servidor FTP. Subir archivos uno por uno llevará mucho tiempo.

Así que hemos creado este script de PowerShell para subir múltiples archivos a un servidor FTP de una sola vez.

Primero, crea un objeto System.Net.WebClient y asígnalo a una variable $WebClient.

$WebClient = New-Object System.Net.WebClient

Especifica el directorio donde se encuentran todos los archivos que deseas subir.

$Dir = "C:\New"

Luego especifica la URI de tu servidor FTP.

$FTP = "ftp://ftp_user:ftp_password@ftp_host/docs/"