Agence web » Actualités du digital » Comment utiliser le module BITS pour transférer des fichiers à l'aide de PowerShell

Comment utiliser le module BITS pour transférer des fichiers à l'aide de PowerShell

Une fonction moins connue de Windows est le service de transfert intelligent en arrière-plan (BITS). Il s'agit d'un service, principalement destiné aux programmeurs et aux administrateurs système, qui fonctionne pour transférer des fichiers vers et depuis les serveurs HTTP et SMB.

Voici quelques-unes des fonctionnalités incroyablement utiles de ce service:

  • Gérer les interruptions du réseau
  • Pause et reprise, même à partir d'un redémarrage
  • Prendre en compte le coût du réseau

Dans cet article, nous explorons comment utiliser BITS dans PowerShell pour effectuer et contrôler les opérations de transfert de fichiers.

Débuter avec BITS

Les applets de commande BITS sont en fait intégrées en tant que commandes PowerShell par défaut. Nous pouvons voir quelles sont ces commandes en exécutant Get-Command | Where-Object Source -EQ 'BitsTransfer'.

Bien que PowerShell 7 soit multiplateforme, cela repose sur un service spécifique à Windows, donc cette fonctionnalité ne sera pas disponible sur d'autres systèmes d'exploitation.

Start-BitsTransfer

Pour créer un nouveau travail de transfert BITS, auquel vous pouvez ensuite ajouter ou supprimer des fichiers, utilisez le Start-BitsTransfer applet de commande. Pour transférer simplement des fichiers entre deux emplacements, vous pouvez définir une source et une destination comme indiqué ci-dessous.

$Params = @{
	"Source"      = '\\Server01\C$\TestFile.txt'
	"Destination" = '\\Server02\C$\TestFile.txt'
}

Start-BitsTransfer @Params

Pour tirer parti des autres applets de commande BITS, il est préférable de donner au travail de transfert BITS une DisplayName qui peut ensuite être référencé ultérieurement. Utiliser le même @Params déclaration, nous pouvons ajouter un nom d'affichage, dans ce cas TestTransfer.

Start-BitsTransfer @Params -DisplayName 'TestTransfer'

Par défaut, le transfert BITS s'exécute à un Foreground priorité, ce qui implique la vitesse de transfert la plus élevée disponible. Cela peut être facilement modifié en utilisant l'une des priorités disponibles répertoriées ci-dessous.

  • Premier plan (par défaut): transfère le travail avec la priorité la plus élevée et concurrence les ressources réseau avec d'autres applications.
  • Haute: Transferts avec une priorité plus élevée que la normale, mais repose toujours sur l'utilisation de la bande passante réseau inactive de l'ordinateur client.
  • Ordinaire: Identique à haute priorité mais avec une priorité inférieure.
  • Faible: Identique à la priorité normale, mais avec la priorité la plus basse possible.Start-BitsTransfer @Params -DisplayName ‘TestTransfer’ -Priority ‘Normal’

Comme mentionné au début, BITS a la capacité unique de prendre en compte le coût du réseau. Pour ce faire, nous utilisons le TransferPolicy paramètre.

$Params = @{
	"Source"         = '\\Server01\C$\TestFile.txt'
	"Destination"    = '\\Server02\C$\TestFile.txt'
	"DisplayName"    = 'TestTransfer'
	"Priority"       = 'Normal'
	"TransferPolicy" = 'Capped'
}

Start-BitsTransfer @Params

Dans cet exemple, Capped implique qu'il existe une limite supérieure pour le trafic réseau et de respecter cette limite.

Enfin, pour démarrer ce travail en arrière-plan et renvoyer notre console pour utilisation, en passant le Asynchronous paramètre nous permet d'arrière-plan le travail.

Start-BitsTransfer @Params -Asynchronous

Get-BitsTransfer

Et si nous voulions vérifier tous les travaux BITS en cours, c'est simple avec le Get-BitsTransfer applet de commande.

Depuis que nous avons nommé notre transfert avec TestTransfer plus tôt, il est facile à trouver. Fonctionnement Get-BitsTransfer par lui-même répertorie tous les travaux en cours d'exécution.

Add-BitsFile

Maintenant que nous avons récupéré notre transfert, nous pouvons réellement ajouter des fichiers supplémentaires à ce transfert simplement en appelant Add-BitsFile.

$Job = Get-BitsTransfer -Name 'TestTransfer'

$Params = @{
	"Source"      = '\\Server01\C$\TestFile2.txt'
	"Destination" = '\\Server02\C$\TestFile2.txt'
}

$Job | Add-BitsFile @Params

Suspend-BitsTransfer

Avec tous ces fichiers transférés, il est parfois nécessaire de suspendre un transfert. Cela peut se produire pour de nombreuses raisons. Souvent, c'est à cause d'un réseau encombré ou un système doit être redémarré au milieu d'un transfert. C'est simple avec BITS, en utilisant le Suspend-BitsTransfer Fonctionnalité.

$Job | Suspend-BitsTransfer

Resume-BitsTransfer

Naturellement, à un moment donné, nous devrons recommencer le travail, et encore une fois c'est aussi simple que de passer le travail dans Resume-BitsTransfer.

$Job | Resume-BitsTransfer

Set-BitsTransfer

Si un travail est toujours actif, il est possible de mettre à jour le travail avec de nouveaux paramètres en utilisant le Set-BitsTransfer applet de commande. Dans l'exemple ci-dessous, nous définissons le travail sur la priorité réseau la plus élevée possible. À l'origine, nous avions défini Normal, mais nous devons faire le travail plus tôt, nous utilisons donc Foreground.

$Job | Set-BitsTransfer -Priority 'Foreground'

Complete-BitsTransfer

Nous avons peut-être suspendu un travail et nous sommes prêts à terminer le transfert. En utilisant le Complete-BitsTransfer applet de commande, nous pouvons dire au BITS de terminer tous les travaux de transfert actifs.

Get-BitsTransfer | Complete-BitsTransfer

Remove-BitsTransfer

Enfin, si nous avons juste besoin de supprimer un travail, en cours d'exécution ou non, nous pouvons utiliser le Remove-BitsTransfer applet de commande.

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

En utilisant -Confirm:$False, signifie que les travaux seront supprimés sans demande de confirmation.

Capacités BITS supplémentaires

Les exemples présentés dans les processus ci-dessus se sont concentrés sur le téléchargement d'un fichier d'un serveur à un autre. BITS a également la possibilité de télécharger un fichier, même avec authentification.

$Params = @{
	"Source"       = '\\Server01\C$\TestFile.txt'
	"Destination"  = ''
	"TransferType" = 'Upload'
}

Start-BitsTransfer @Params

Il est important de noter que le comportement par défaut de BITS consiste à télécharger automatiquement plusieurs fichiers. Ce n'est pas le même comportement avec le téléchargement, et pour contourner cette limitation, vous pouvez diriger plusieurs fichiers vers le Start-BitsTransfer applet de commande.

Si le serveur de destination est protégé par authentification, vous pouvez spécifier le type tel que Basic, Digest, NTLM, Negotiate, ou Passport en utilisant le Authentication paramètre. Bien sûr, en utilisant l'authentification, vous devrez transmettre un identifiant qui peut être fait facilement avec le Credential paramètre. Cela prend standard PSCredential objets et fonctionne bien pour garder vos secrets sécurisés et cryptés dans vos scripts.

Conclusion

BITS est un moyen fantastique de contrôler les transferts de fichiers entre les serveurs et entre les serveurs Web. Avec la possibilité de suspendre et de reprendre, il est facile de contrôler le transfert de fichiers sur les liaisons réseau, même ceux qui doivent être modérés en raison du coût potentiel.

Bien que cela ne fonctionne que sur Windows, BITS est un outil puissant à intégrer dans vos scripts et à contrôler précisément les transferts de fichiers, même lors des redémarrages. Remplaçant potentiellement les utilitaires Windows traditionnels comme Robocopy, BITS adhère à la méthodologie PowerShell et avec la possibilité de transférer en arrière-plan des tâches, s'intègre de manière transparente dans l'automatisation et les scripts existants.

★★★★★