HOWTO · PowerShell

Cómo subir archivos con FTP en PowerShell

Este tutorial te enseñará a 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"

–>

Después de eso, crea el objeto System.URI y asígnalo a una variable, como se muestra a continuación.

$URI = New-Object System.Uri($FTP)

El paso final es usar el método UploadFile. Luego, el archivo se subirá al servidor FTP.

$WebClient.UploadFile($URI, $File)

El script completo se muestra a continuación.

$WebClient = New-Object System.Net.WebClient
$File = "C:\New\car.png"
$FTP = "ftp://ftp_user:ftp_password@ftp_host/car.png"
$URI = New-Object System.Uri($FTP)
$WebClient.UploadFile($URI, $File)

Usa el objeto FtpWebRequest para subir archivos con FTP en PowerShell

Este método creará una instancia de un objeto FtpWebRequest para subir archivos al servidor FTP en PowerShell.

Primero, define los detalles de FTP y del archivo.

$username = "ftp_user"
$password = "ftp_password"
$local_file = "C:\New\test.txt"
$remote_file = "ftp://ftp_host/test.txt"

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/"

–>

Después de eso, usa el bucle foreach para ejecutar el comando contra cada elemento en $Dir. El siguiente código sube todos los archivos .txt en $Dir a un servidor FTP $FTP.

foreach ($item in (Get-ChildItem $Dir "*.txt")) {
    "Uploading $item..."
    $URI = New-Object System.Uri($FTP + $item.Name)
    $WebClient.UploadFile($URI, $item.FullName)
}

Esperamos que este artículo te haya ayudado a subir archivos con un servidor FTP en PowerShell.