Partager via


Utilisation de Windows PowerShell pour créer des tâches de transfert BITS

Vous pouvez utiliser des applets de commande PowerShell pour créer des travaux de transfert synchrones et asynchrones du service de transfert intelligent en arrière-plan (BITS).

Tous les exemples de cette rubrique utilisent l’applet de commande Start-BitsTransfer . Pour utiliser l’applet de commande, veillez d’abord à importer le module. Pour installer le module, exécutez la commande suivante : Import-Module BitsTransfer. Pour plus d’informations, tapez Get-Help Start-BitsTransfer à l’invite PowerShell.

Important

Lorsque vous utilisez des applets de commande *-BitsTransfer à partir d’un processus qui s’exécute dans un contexte non interactif, tel qu’un service Windows, il se peut que vous ne puissiez pas ajouter de fichiers aux travaux BITS, ce qui peut entraîner un état suspendu. Pour que le travail continue, l’identité utilisée pour créer un travail de transfert doit être connectée. Par exemple, lors de la création d’un travail BITS dans un script PowerShell qui a été exécuté en tant que travail du planificateur de tâches, le transfert BITS ne se terminera jamais, sauf si le paramètre de tâche du planificateur de tâches « Exécuter uniquement lorsque l’utilisateur est connecté » est activé.

 

Pour créer un travail de transfert BITS synchrone

Start-BitsTransfer -Source https://Server01/serverdir/testfile1.txt `
-Destination C:\clientdir\testfile1.txt

Notes

Le caractère d’accentuation grave (') est utilisé pour indiquer un saut de ligne.

 

Dans l’exemple précédent, les noms locaux et distants du fichier sont spécifiés respectivement dans les paramètres Source et Destination . L’invite de commandes réapparaît lorsque le transfert de fichiers est terminé ou lorsqu’il indique un état d’erreur.

Le type de transfert par défaut est Download. Lorsque vous chargez des fichiers vers un emplacement HTTP, le paramètre TransferType doit être défini sur Charger.

Étant donné que la position du paramètre est appliquée pour l’applet de commande Start-BitsTransfer , les noms de paramètres n’ont pas besoin d’être spécifiés pour les paramètres Source et Destination. Par conséquent, cette commande peut être simplifiée comme suit.

Start-BitsTransfer https://Server01/serverdir/testfile1.txt C:\clientdir\testfile1.txt

Pour créer un travail de transfert BITS synchrone avec plusieurs fichiers

Start-BitsTransfer -Source C:\clientsourcedir\*.txt `
-Destination c:\clientdir\ -TransferType Download

Dans l’exemple précédent, la commande Start-BitsTransfer crée un travail de transfert BITS. Tous les fichiers sont ajoutés à ce travail et transférés séquentiellement vers le client.

Notes

Le chemin de destination ne peut pas utiliser de caractères génériques. Le chemin d’accès de destination prend en charge les répertoires relatifs, les chemins d’accès racine ou les répertoires implicites (autrement dit, le répertoire actif). Les fichiers de destination ne peuvent pas être renommés à l’aide d’un caractère générique. En outre, les URL HTTP et HTTPS ne fonctionnent pas avec des caractères génériques. Les caractères génériques ne sont valides que pour les chemins UNC et les répertoires locaux.

 

Pour créer un travail de transfert BITS synchrone et spécifier des informations d’identification pour un serveur distant

Start-BitsTransfer -DisplayName MyJob -Credential Username\Domain `
-Source https://server01/servertestdir/testfile1.txt -Destination c:\clienttestdir\testfile1.txt `
-ProxyUsage Override -ProxyList @(https://proxy1, 123.24.21.23, proxy3)

Dans l’exemple précédent, un utilisateur crée un travail de transfert BITS pour télécharger un fichier à partir d’un serveur qui nécessite une authentification. L’utilisateur est invité à entrer des informations d’identification et le paramètre Credential transmet un objet d’informations d’identification à l’applet de commande Start-BitsTransfer . L’utilisateur définit un proxy explicite et le travail de transfert BITS utilise uniquement les proxys définis par le paramètre ProxyList . Le paramètre DisplayName donne au travail de transfert BITS un nom d’affichage unique.

Pour créer un travail de transfert BITS synchrone à partir d’un fichier CSV

Import-CSV filelist.txt | Start-BitsTransfer -TransferType Upload

Notes

Le « | » est le caractère de canal.

 

Dans l’exemple précédent, un utilisateur crée un travail de transfert BITS qui charge plusieurs fichiers à partir d’un client. L’applet de commande Import-CSV importe les emplacements des fichiers source et de destination et les dirige vers la commande Start-BitsTransfer. La commande Start-BitsTransfer crée un travail de transfert BITS pour chaque fichier, ajoute les fichiers au travail, puis les transfère séquentiellement au serveur.

Le contenu du fichier Filelist.txt doit être au format suivant :

Source, Destination
c:\clienttestdir\testfile1.txt, https://server01/servertestdir/testfile1.txt
c:\clienttestdir\testfile2.txt, https://server01/servertestdir/testfile2.txt
c:\clienttestdir\testfile3.txt, https://server01/servertestdir/testfile3.txt
c:\clienttestdir\testfile4.txt, https://server01/servertestdir/testfile4.txt

Pour créer un travail de transfert BITS asynchrone

$Job = Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip `
       -Destination d:\temp\downloads\ -Asynchronous

while (($Job.JobState -eq "Transferring") -or ($Job.JobState -eq "Connecting")) `
       { sleep 5;} # Poll for status, sleep for 5 seconds, or perform an action.

Switch($Job.JobState)
{
    "Transferred" {Complete-BitsTransfer -BitsJob $Job}
    "Error" {$Job | Format-List } # List the errors.
    default {"Other action"} #  Perform corrective action.
}

Dans l’exemple précédent, le travail de transfert BITS a été affecté à la variable $Job. Les fichiers sont téléchargés séquentiellement. Une fois le travail de transfert terminé, les fichiers sont immédiatement disponibles. Si $Job.JobState retourne « Transfered », l’objet $Job est envoyé à l’applet de commande Complete-BitsTransfer .

Si $Job.JobState retourne « Error », l’objet $Job est envoyé à l’applet de commande Format-List pour répertorier les erreurs.

Pour gérer les sessions PowerShell à distance

À compter de Windows 10 version 1607, vous pouvez exécuter des applets de commande PowerShell, BITSAdmin ou d’autres applications qui utilisent les interfaces BITS à partir d’une ligne de commande PowerShell Remote connectée à un autre ordinateur (physique ou virtuel). Cette fonctionnalité n’est pas disponible lors de l’utilisation d’une ligne de commande PowerShell Direct sur une machine virtuelle sur la même machine physique, et elle n’est pas disponible lors de l’utilisation des applets de commande WinRM.

Un travail BITS créé à partir d’une session PowerShell distante s’exécute dans le contexte du compte d’utilisateur de cette session et ne progresse que lorsqu’au moins une session d’ouverture de session locale ou une session PowerShell distante est associée à ce compte d’utilisateur. Vous pouvez utiliser les sessions PSSession persistantes de PowerShell pour exécuter des commandes à distance sans avoir besoin de garder une fenêtre PowerShell ouverte pour chaque travail afin de continuer à progresser, comme décrit dans PowerShell Basics: Remote Management.

  • New-PSSession crée une session PowerShell distante persistante. Une fois créés, les objets PSSession persistent dans l’ordinateur distant jusqu’à ce qu’ils soient supprimés explicitement. Toutes les tâches BITS lancées dans une session active progressent dans le transfert des données, même une fois que le client s’est déconnecté de la session.
  • Disconnect-PSSession déconnecte l’ordinateur client d’une session PowerShell distante et l’état de la session continue d’être géré par l’ordinateur distant. Plus important encore, les processus de la session à distance continueront de s’exécuter, et les travaux BITS continueront de progresser. L’ordinateur client peut même redémarrer et/ou s’éteindre après avoir appelé Disconnect-PSSession.
  • Connect-PSSession reconnecte l’ordinateur client à une session PowerShell distante active.
  • Remove-PSSession supprime une session PowerShell distante.

L’exemple ci-dessous montre comment utiliser PowerShell Remote pour travailler avec des travaux de transfert BITS asynchrones d’une manière qui permet au travail de continuer à progresser même si vous n’êtes pas connecté activement à la session distante.

# Establish a PowerShell Remote session in Server01 with name 'MyRemoteSession'
New-PSSession -ComputerName Server01 -Name MyRemoteSession -Credential Domain01\User01

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# While running in the context of the PowerShell Remote session, start a new BITS transfer
Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip -Destination c:\temp\downloads\ -Asynchronous

# Exit the PowerShell Remote session's context
Exit-PSSession

# Disconnect the 'MyRemoteSession' PowerShell Remote session from the current PowerShell window
# After this command, it is safe to close the current PowerShell window and turn off the local machine
Disconnect-PSSession -Name MyRemoteSession


# The commands below can be executed from a different PowerShell window, even after rebooting the local machine
# Connect the 'MyRemoteSession' PowerShell Remote session to the current PowerShell window
Connect-PSSession -ComputerName Server01 -Name MyRemoteSession

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# Manage BITS transfers on the remote machine via Complete-BitsTransfer, Remove-BitsTransfer, etc.

# Exit the PowerShell Remote session's context
Exit-PSSession

# Destroy the 'MyRemoteSession' PowerShell Remote session when no longer needed
Remove-PSSession -Name MyRemoteSession

Start-BitsTransfer

Complete-BitsTransfer