Comment transférer efficacement des fichiers volumineux à l’aide de PowerShell et de BITS

Si vous cherchez à envoyer ou télécharger des fichiers volumineux sans saturer votre réseau, BITS (Background Intelligent Transfer Service) est un outil très pratique, d’autant plus qu’il est intégré à Windows. Conçu pour fonctionner discrètement en arrière-plan, il gère les fichiers volumineux avec fluidité, même avec une connexion instable ou si vous devez interrompre et reprendre les transferts sans les recommencer. Il est surprenant de constater à quel point ce service est souvent négligé, car il est très fiable, notamment pour les administrateurs réseau ou les personnes manipulant des fichiers multimédias ou de machines virtuelles volumineux. Ce guide vous explique comment utiliser PowerShell pour lancer, gérer et surveiller les transferts BITS. La manipulation peut paraître un peu technique, mais elle en vaut la peine car, sur certaines configurations, les transferts avec BITS sont bien plus stables que la copie traditionnelle, en particulier sur des connexions lentes ou instables. De plus, ces étapes peuvent facilement être intégrées à des automatisations ou des scripts si vous effectuez régulièrement ces opérations ; une information précieuse.

Comment utiliser PowerShell et BITS pour les transferts de fichiers volumineux

Comment télécharger des fichiers à l’aide du module BitsTransfer de PowerShell

Voici la méthode de base : vous utilisez le module BitsTransfer de PowerShell pour lancer le téléchargement d’un fichier. C’est un peu comme un téléchargement web classique, mais en mieux, car il permet de mettre en pause, de reprendre et de limiter la bande passante selon vos besoins. La commande Start-BitsTransfer vous sera très utile. Par exemple, supposons que vous souhaitiez télécharger une image ISO depuis un serveur de test :

Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp

Cette commande lance le téléchargement et affiche une barre de progression. Attention : il s’agit d’un transfert synchrone simple. Si votre connexion est interrompue en cours de téléchargement, vous devrez tout recommencer, car la reprise n’est pas prise en charge. C’est un peu embêtant, mais c’est simple. Sur certains systèmes, des problèmes peuvent survenir si le contrôle de compte d’utilisateur (UAC) ou le pare-feu bloquent le protocole BITS ; vérifiez donc ces paramètres si rien ne se passe.

Comment activer les transferts asynchrones et reprenables

Si votre connexion est instable ou si vous téléchargez des fichiers volumineux, le mode asynchrone est la solution idéale. Il permet au téléchargement de se poursuivre en arrière-plan, et même en cas de redémarrage de votre système ou de coupure réseau, il reprendra automatiquement une fois la connexion rétablie. Il suffit d’ajouter l’option `-asynchronous`.

Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp -asynchronous

Ainsi, le transfert ne bloque aucune autre activité et, en cas de perte de connexion, il reprendra là où il s’est arrêté. C’est particulièrement utile pour déplacer des fichiers volumineux sur des réseaux instables. De plus, pour que BITS fonctionne correctement avec le reste du trafic réseau, attribuez-lui une priorité plus basse en ajoutant l’option `-Priority low`. De cette façon, il n’accaparera pas toute la bande passante et ne perturbera pas votre navigation ni votre travail.

Gestion et suivi des emplois BITS

Une fois le transfert lancé, il est conseillé de le surveiller. Pour afficher tous les transferts BITS actifs, exécutez :

Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize

Ceci vous donne un aperçu rapide des données transférées, de leur progression et de l’état actuel : connexion, transfert ou terminé. Une fois le transfert terminé, n’oubliez pas : vous devez exécuter cette commande pour finaliser le processus correctement.

Get-BitsTransfer | where {$_. JobState -eq 'Transferred'} | Complete-BitsTransfer

Cette commande finalise le transfert, renomme le fichier temporaire (.TMP) avec son nom d’origine et effectue un nettoyage. Sans cela, vous risqueriez de vous retrouver avec des fichiers incomplets, ce qui est loin d’être pratique.

Si vous devez copier des fichiers sur des partages réseau ou des PC distants, il vous suffit de spécifier le chemin UNC, comme ceci :

Start-BitsTransfer -Source C:\iso\win2022.iso -Destination \\man-srv01\c$\iso -Asynchronous -DisplayName CopyISOtoMan

Et, si le processus se bloque ou si vous souhaitez interrompre un transfert, utilisez :

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

Pour reprendre plus tard, exécutez :

Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -Asynchronous

PowerShell prend même en charge la transmission d’informations d’identification si vous devez vous authentifier sur un serveur distant avec :

Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential (Get-Credential)

Enfin, si vous suivez de près la progression, un petit script peut afficher le pourcentage de transfert en temps réel, ce qui est plutôt pratique :

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

Ce n’est pas la solution la plus élégante, mais elle fait l’affaire si vous souhaitez un suivi continu.À noter : BITS est utilisé pour Windows Update et de nombreuses opérations réseau en arrière-plan ; il est donc aussi fiable que les mécanismes natifs de Windows et, par conséquent, il évite d’interférer avec les autres activités réseau, ce qui le rend idéal pour les téléchargements volumineux ou multiples sur un réseau étendu.