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

Une fonctionnalité 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 permet de transférer des fichiers vers et depuis des serveurs HTTP et SMB.

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

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

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

Mise en route 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 une nouvelle tâche de transfert BITS, à laquelle vous pouvez ensuite ajouter ou supprimer des fichiers, utilisez l'applet de commande Start-BitsTransfer. 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 Advertisement

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

Start-BitsTransfer @Params -DisplayName 'TestTransfer'

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

  • Au premier plan (par défaut) : transfère la tâche avec la priorité la plus élevée et rivalise pour les ressources réseau avec d'autres applications.
  • Élevé : transferts avec une priorité plus élevée que la normale, mais s'appuie toujours sur l'utilisation de la bande passante réseau inactive de l'ordinateur client.
  • Normal: Identique à la priorité élevée mais avec une priorité inférieure.
  • Low : Identique à la priorité normale mais avec la priorité la plus faible possible.Start-BitsTransfer @Params -DisplayName ‘TestTransfer& #8217; -Priorité ‘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 paramètre TransferPolicy.

$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 pour respecter cette limite.

Enfin, pour démarrer ce travail en arrière-plan et retourner notre console pour utilisation, le passage du paramètre Asynchrone nous permet de mettre le travail en arrière-plan.

Start-BitsTransfer @Params -Asynchronous

Get-BitsTransfer

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

Publicité

Comme nous avons nommé notre transfert avec TestTransfer plus tôt, il est facile à trouver. L'exécution de Get-BitsTransfer par elle-même répertorie tous les travaux en cours.

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 -BitsFichier.

$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 transferts de fichiers, 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 d'un système qui doit être redémarré au milieu d'un transfert. C'est simple avec BITS, en utilisant la fonctionnalité Suspend-BitsTransfer.

$Emploi | 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.

$Emploi | Resume-BitsTransfer

Set-BitsTransfer

Si une tâche est toujours active, il est possible de mettre à jour la tâche avec de nouveaux paramètres à l'aide de l'applet de commande Set-BitsTransfer. Dans l'exemple ci-dessous, nous définissons le travail sur la priorité réseau la plus élevée possible. À l'origine, nous avons défini le travail sur Normal, mais nous devons le faire plus tôt, nous utilisons donc le premier plan.

$Job | Set-BitsTransfer -Priority 'Foreground'

Complete-BitsTransfer

Nous avons peut-être suspendu une tâche et nous sommes prêts à terminer le transfert. En utilisant l'applet de commande Complete-BitsTransfer, nous pouvons dire à BITS de terminer toutes les tâches de transfert actives.

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 la cmdlet Remove-BitsTransfer.

Get-BitsTransfer -Name “JobToBeRemoved” | Remove-BitsTransfer -Confirm:$False

L'utilisation de -Confirm:$False signifie que les travaux seront supprimés sans invite de confirmation.

Capacités BITS supplémentaires

Les exemples présentés dans les processus ci-dessus étaient 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” = '<http://server02/uploaddir/testfile.txt>' “TransferType” = 'Upload' } Start-BitsTransfer @Params

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

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

Conclusion

BITS est un fantastique moyen 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 liens réseau, même ceux qui doivent être modérés en raison du coût potentiel.

Publicité

Malgré cela, cela ne fonctionne que sous Windows , BITS est un outil puissant à intégrer dans vos scripts et à contrôler avec précision les transferts de fichiers, même entre les 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 en tant que tâches, s'intègre de manière transparente dans l'automatisation et les scripts existants.


Posted

in

by

Tags: