Cómo usar el módulo BITS para transferir archivos usando PowerShell

Contenidos

Logotipo de Powershell

Una característica menos conocida de Windows es el Servicio de transferencia inteligente en segundo plano (BITS). Este es un servicio, principalmente para programadores y administradores de sistemas, que funciona para transferir archivos hacia y desde servidores HTTP y SMB.

Estas son algunas de las características increíblemente útiles de este servicio:

  • Manejar las interrupciones de la red
  • Pausar y reanudar, inclusive desde un reinicio
  • Tenga en cuenta el costo de la red

En este post, exploramos cómo utilizar BITS en PowerShell para realizar y controlar las operaciones de transferencia de archivos.

Introducción a BITS

los Cmdlets BITS en realidad están integrados como comandos de PowerShell predeterminados. Podemos ver cuáles son esos comandos ejecutando Get-Command | Where-Object Source -EQ 'BitsTransfer'.

Aún cuando PowerShell 7 es multiplataforma, se basa en un servicio específico de Windows, por lo que esta funcionalidad no estará disponible en otros sistemas operativos.

Transferencia de bits de inicio

Para crear un nuevo trabajo de transferencia de BITS, al que después puede agregar o borrar archivos, use el Start-BitsTransfer cmdlet. Para transferir archivos simplemente entre dos ubicaciones, puede establecer un origen y un destino como se muestra a continuación.

$Params = @{
	"Source"      = 'Server01C$TestFile.txt'
	"Destination" = 'Server02C$TestFile.txt'
}

Start-BitsTransfer @Params

Para aprovechar los otros cmdlets de BITS, es mejor darle al trabajo de transferencia de BITS un DisplayName que después se puede hacer referencia más adelante. Usando el mismo @Params declaración, podemos agregar un nombre para mostrar, en esta circunstancia TestTransfer.

Start-BitsTransfer @Params -DisplayName 'TestTransfer'

De forma predeterminada, la transferencia de BITS se ejecutará a Foreground prioridad, lo que implica la mayor velocidad de transferencia disponible. Esto se puede cambiar fácilmente usando una de las prioridades disponibles que se enumeran a continuación.

  • Primer plano (predeterminado): transfiere el trabajo con la prioridad más alta y compite por los recursos de red con otras aplicaciones.
  • Elevado: Transfiere con una prioridad más alta de lo normal, pero aún depende del uso del ancho de banda inactivo de la red del equipo cliente.
  • Normal: Igual que la prioridad alta pero con una prioridad más baja.
  • Bajo: Igual que la prioridad normal pero con la prioridad más baja factible. Start-BitsTransfer @Params -DisplayName ‘TestTransfer’ -Priority ‘Normal’

Como se mencionó al principio, BITS tiene la capacidad única de prestar atención el costo de la red. Para hacer esto, usamos el TransferPolicy parámetro.

$Params = @{
	"Source"         = 'Server01C$TestFile.txt'
	"Destination"    = 'Server02C$TestFile.txt'
	"DisplayName"    = 'TestTransfer'
	"Priority"       = 'Normal'
	"TransferPolicy" = 'Capped'
}

Start-BitsTransfer @Params

En este ejemplo, Capped implica que hay un límite superior para el tráfico de la red y respetar ese límite.

Para terminar, para iniciar este trabajo en segundo plano y devolver nuestra consola para su uso, pasando el Asynchronous El parámetro nos posibilita poner en segundo plano el trabajo.

Start-BitsTransfer @Params -Asynchronous

Get-BitsTransfer

¿Y si quisiéramos chequear todos los trabajos de BITS en ejecución? Get-BitsTransfer cmdlet.

Desde que nombramos nuestra transferencia con TestTransfer antes, es fácil de hallar. Corriendo Get-BitsTransfer por sí solo mostrará una lista de todos los trabajos en ejecución.

Add-BitsFile

Ahora que hemos recuperado nuestra transferencia, podemos agregar archivos adicionales a esta transferencia simplemente llamando Add-BitsFile.

$Job = Get-BitsTransfer -Name 'TestTransfer'

$Params = @{
	"Source"      = 'Server01C$TestFile2.txt'
	"Destination" = 'Server02C$TestFile2.txt'
}

$Job | Add-BitsFile @Params

Suspend-BitsTransfer

Con todos estos archivos transfiriéndose, a veces es necesario pausar una transferencia. Esto puede ocurrir por muchas razones. A menudo, se debe a una red congestionada o un sistema debe reiniciarse en medio de una transferencia. Esto es simple con BITS, usando el Suspend-BitsTransfer funcionalidad.

$Job | Suspend-BitsTransfer

Transferencia de bits de currículum

Naturalmente, en alguna vez tendremos que comenzar el trabajo nuevamente, y nuevamente es tan simple como pasar el trabajo a Resume-BitsTransfer.

$Job | Resume-BitsTransfer

Transferencia de bits

Si un trabajo aún está activo, es factible actualizar el trabajo con una nueva configuración usando el Set-BitsTransfer cmdlet. En el siguiente ejemplo, estamos configurando el trabajo con la mayor prioridad de red factible. Originalmente configuramos el trabajo para Normal, pero tenemos que hacer el trabajo antes, por lo tanto usamos Foreground.

$Job | Set-BitsTransfer -Priority 'Foreground'

Transferencia de bits completos

Tal vez hayamos suspendido un trabajo y estemos listos para finalizar el traspaso. Usando el Complete-BitsTransfer cmdlet, podemos decirle a BITS que finalice todos los trabajos de transferencia activos.

Get-BitsTransfer | Complete-BitsTransfer

Transferencia de bits

Para terminar, si solo necesitamos borrar un trabajo, en ejecución o no, podemos utilizar el Remove-BitsTransfer cmdlet.

Get-BitsTransfer -Name "JobToBeRemoved" | Remove-BitsTransfer -Confirm:$False

Usando -Confirm:$False, significa que los trabajos se eliminarán sin una solicitud de confirmación.

Capacidades adicionales de BITS

Los ejemplos que se muestran en los procesos anteriores se concentraron en la descarga de un archivo de un servidor a otro. BITS además tiene la capacidad de cargar un archivo, inclusive con autenticación.

$Params = @{
	"Source"       = 'Server01C$TestFile.txt'
	"Destination"  = '<http://server02/uploaddir/testfile.txt>'
	"TransferType" = 'Upload'
}

Start-BitsTransfer @Params

Es esencial prestar atención que el comportamiento predeterminado de BITS es descargar varios archivos automáticamente. Este no es el mismo comportamiento con la carga y, para evitar esta limitación, puede canalizar varios archivos al Start-BitsTransfer cmdlet.

Si el servidor de destino está protegido por autenticación, puede especificar el tipo, como Basic, Digest, NTLM, Negotiate, o Passport usando el Authentication parámetro. Desde luego, al utilizar la autenticación, deberá pasar una credencial que se puede hacer fácilmente con el Credential parámetro. Esto necesita estándar PSCredential objetos y funciona bien para mantener sus secretos seguros y encriptados dentro de sus scripts.

Conclusión

BITS es una forma fantástica de controlar la transferencia de archivos entre servidores y entre servidores web. Con la capacidad de suspender y reanudar, es fácil controlar la transferencia de archivos a través de links de red, inclusive aquellos que deben moderarse debido al costo potencial.

Pese a que esto solo funciona en Windows, BITS es una herramienta poderosa para integrarse en sus scripts y controlar con precisión las transferencias de archivos, inclusive entre reinicios. Potencialmente reemplazando las utilidades tradicionales de Windows como Robocopy, BITS se adhiere a la metodología PowerShell y, con la capacidad de realizar transferencias en segundo plano como trabajos, se integra sin problemas en la automatización y los scripts existentes.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.