Si intentas enviar o descargar archivos grandes sin saturar toda tu red, BITS (Servicio de Transferencia Inteligente en Segundo Plano) es bastante práctico, además de estar integrado en Windows. Está diseñado para funcionar silenciosamente en segundo plano, gestionando archivos grandes sin problemas, incluso si tu conexión no es perfecta o si necesitas pausar y reanudar transferencias sin tener que empezar de cero. Sinceramente, es un poco raro que la gente lo pase por alto a menudo, ya que es bastante fiable, sobre todo para administradores de red o personas que trabajan con archivos multimedia o de máquinas virtuales de gran tamaño. En cualquier caso, en esta guía, verás cómo usar PowerShell para iniciar, gestionar y supervisar transferencias con BITS. Es un poco complejo, pero merece la pena el esfuerzo porque, en algunas configuraciones, transferir con BITS es mucho más estable que la copia tradicional, sobre todo en enlaces lentos o inestables. Además, gran parte de esto se puede integrar en automatizaciones o scripts si lo haces con frecuencia, así que es bueno saberlo.
Cómo usar PowerShell y BITS para transferencias de archivos grandes
Cómo descargar archivos mediante el módulo BitsTransfer de PowerShell
Este es el método básico: se usa el módulo BitsTransfer de PowerShell para iniciar la descarga de un archivo. Es similar a una descarga web normal, pero mejor porque permite pausar, reanudar y limitar el ancho de banda según las necesidades. El comando Start-BitsTransfer es muy útil. Por ejemplo, supongamos que se desea obtener una ISO de un servidor de prueba:
Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp
Este comando inicia la descarga y lo que verás en pantalla es una barra de progreso. Ten en cuenta que se trata de una transferencia síncrona simple. Si tu conexión se cae a mitad de la descarga, tendrás que reiniciarlo todo, ya que no permite reanudarlo. Es un poco molesto, pero es sencillo. En algunos sistemas, podrías tener problemas si el Control de Cuentas de Usuario (UAC) o la configuración del firewall bloquean BITS, así que revísalos si no ocurre nada.
Cómo habilitar transferencias asincrónicas y reanudables
Si tu conexión es inestable o estás descargando archivos enormes, el modo asíncrono es la mejor opción. Permite que el trabajo continúe en segundo plano, e incluso si el sistema se reinicia o la red se cae, debería reanudarse una vez que todo vuelva a funcionar. Simplemente añade -asynchronous :
Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp -asynchronous
De esta forma, la transferencia no bloquea nada más y, si pierdes la conexión, intentará continuar desde donde la dejaste. Esto es útil al transferir archivos grandes en redes inestables. Además, si quieres que BITS funcione correctamente con el resto del tráfico de red, dale una prioridad más baja añadiendo «Prioridad baja «.Así, no consumirá todo el ancho de banda ni interferirá con tu navegación o trabajo.
Gestión y supervisión de trabajos de BITS
Una vez que se esté ejecutando una transferencia, probablemente quieras supervisarla. Para ver todos los trabajos de BITS activos, ejecuta:
Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize
Esto ofrece una visión general de lo que se está transfiriendo, cuánto se ha realizado y el estado actual: si se está conectando, transfiriendo o se ha completado. Al finalizar una transferencia, no olvide ejecutar esto para finalizarla correctamente.
Get-BitsTransfer | where {$_. JobState -eq 'Transferred'} | Complete-BitsTransfer
Este comando finaliza la transferencia, renombra el archivo temporal (.TMP) a su nombre original y realiza la limpieza. De lo contrario, podrías quedarte con archivos incompletos, lo cual resulta un poco incómodo.
Si necesita copiar archivos a recursos compartidos de red o PC remotas, simplemente especifique la ruta UNC, como:
Start-BitsTransfer -Source C:\iso\win2022.iso -Destination \\man-srv01\c$\iso -Asynchronous -DisplayName CopyISOtoMan
Y, si las cosas se atascan o quieres pausar una transferencia, usa:
Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer
Para reanudar más tarde, ejecute:
Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -Asynchronous
PowerShell incluso admite el paso de credenciales si necesita autenticarse en un servidor remoto con:
Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential (Get-Credential)
Por último, si estás siguiendo obsesivamente tu progreso, un pequeño script puede mostrar el porcentaje de transferencia en vivo, lo cual es bastante útil:
Import-Module BitsTransfer $bitsjob = Start-BitsTransfer -Source http://10.1.1.18/erd65_32.iso -Destination c:\temp -Asynchronous while (($bitsjob. JobState. ToString() -eq 'Transferring') -or ($bitsjob. JobState. ToString() -eq 'Connecting')) { Write-Host $bitsjob. JobState. ToString() $Proc = ($bitsjob. BytesTransferred / $bitsjob. BytesTotal) * 100 Write-Host "$Proc %" Start-Sleep -Seconds 3 } Complete-BitsTransfer -BitsJob $bitsjob
No es muy elegante, pero funciona si buscas un estado continuo. Recuerda: BITS se usa para Windows Update y muchas tareas de red en segundo plano, por lo que es tan fiable como los propios mecanismos de Windows. Esto significa que intenta no interferir con otras actividades de red, lo que lo hace perfecto para descargas grandes o múltiples a través de redes WAN.