Vous devez télécharger des fichiers depuis le web mais détestez cliquer plusieurs fois sur les liens ? Si votre travail implique de télécharger régulièrement des fichiers depuis le web, vous voudrez probablement automatiser cette tâche. Pourquoi ne pas utiliser PowerShell pour télécharger des fichiers de manière similaire à wget PowerShell ?
Windows PowerShell et PowerShell disposent de capacités de téléchargement de fichiers. Utiliser PowerShell pour télécharger des fichiers consiste à savoir quels cmdlets et classes .NET utiliser et comment les utiliser.
Dans cet article, vous apprendrez les différentes façons d’utiliser PowerShell pour télécharger des fichiers depuis le web.
Prérequis
Étant donné que cet article est un article d’apprentissage pratique, il y a quelques prérequis pour vous assurer de pouvoir suivre les exemples. Voici les exigences de base.
- A computer that is running on Windows 10 or higher. This computer is where you will run the scripts/commands featured in this article.
- Windows PowerShell 5.1 ou PowerShell 7.1 (recommandé).
- Windows 10 inclut déjà Windows PowerShell 5.1.
- A web site that hosts the files to download.
- Pour les téléchargements de fichiers non authentifiés, envisagez d’utiliser le site Tele2 Speedtest, qui est gratuit.
- Si vous souhaitez tester les téléchargements de fichiers avec une autorisation, vous devrez peut-être créer votre propre serveur de fichiers HTTP. Un exemple de serveur de fichiers HTTP gratuit est HFS by Rejetto.
Utilisation de PowerShell pour télécharger des fichiers à partir d’URL : quatre méthodes
Il existe quatre méthodes pour utiliser PowerShell afin de télécharger des fichiers sans dépendre d’outils tiers. Ce sont les suivantes :
Invoke-WebRequest
Invoke-RestMethod
Start-BitsTransfer
- Classe WebClient .NET.
Quelle que soit la méthode que vous utilisez parmi ces quatre méthodes, la logique et les composants pour les faire fonctionner sont les mêmes. Il doit y avoir une URL source pointant vers l’emplacement du fichier et le chemin de destination pour enregistrer les fichiers téléchargés. Si nécessaire par le serveur web, vous devez également saisir les informations d’identification.
Les sections suivantes montrent chacune de ces quatre méthodes. En fin de compte, c’est à vous de décider de la manière dont vous adapteriez lorsque vous utilisez PowerShell pour télécharger des fichiers.
Utilisation de Invoke-WebRequest comme alternative wget PowerShell
La première méthode dans PowerShell pour télécharger des fichiers est en utilisant le Invoke-WebRequest
cmdlet. Peut-être le cmdlet le plus utilisé dans cet article, Invoke-WebRequest
, peut télécharger des liens HTTP, HTTPS et FTP.
Que l’emplacement source nécessite que les utilisateurs se connectent ou non, le cmdlet Invoke-WebRequest
peut également gérer les demandes avec des informations d’identification.
Pour télécharger un fichier, la syntaxe ci-dessous montre les paramètres minimum requis pour obtenir le résultat souhaité.
Par exemple, le code ci-dessous télécharge un fichier avec le nom 10MB.zip depuis un site web. Ensuite, il enregistre le fichier téléchargé dans C:\dload\10MB.zip. Vous pouvez copier le code ci-dessous et le coller dans votre session PowerShell pour le tester.
La démonstration ci-dessous montre le résultat attendu après l’exécution du code ci-dessus dans PowerShell. Comme vous pouvez le voir, le téléchargement du fichier a été réussi.

Que se passe-t-il si la source nécessite une authentification avant de permettre l’accès ? Par exemple, le code ci-dessous télécharge un fichier d’un site web privé où les utilisateurs doivent se connecter.
Cependant, le téléchargement a échoué en raison d’un accès non autorisé.

Si une authentification est requise, vous devriez ajouter des informations d’identification à la requête en utilisant le paramètre -Credential
. La première ligne du code ci-dessous vous invite à entrer les informations d’identification (nom d’utilisateur et mot de passe) et les stocke dans la variable $credential
.
La démonstration ci-dessous montre ce à quoi vous devez vous attendre lorsque vous exécutez le code ci-dessus dans PowerShell. Comme vous pouvez le voir, le cmdlet Get-Credential
a provoqué une demande d’informations d’identification PowerShell. Cette fois, l’utilisation des informations d’identification avec Invoke-WebRequest
a abouti à un téléchargement réussi.

Faites attention aux erreurs d’analyse lors de l’utilisation de Invoke-WebRequest
A crucial thing to remember when using Invoke-WebRequest
in Windows PowerShell is that, by default, this cmdlet uses the Internet Explorer engine to parse data. The error below may happen when using Invoke-WebRequest
on computers without the Internet Explorer in it.
Vous devrez émettre à nouveau votre commande, mais cette fois, incluez l’interrupteur -UseBasicParsing
.
En PowerShell de Windows, vous pouvez recevoir un message d’erreur : Le contenu de la réponse ne peut pas être analysé car le moteur Internet Explorer n’est pas disponible, ou la configuration de première exécution d’Internet Explorer n’est pas complète. Spécifiez le paramètre UseBasicParsing et réessayez.
À partir de PowerShell Core 6.0, la cmdlet Invoke-WebRequest
utilise uniquement une analyse de base. En tant que tel, le paramètre -UseBasicParsing
n’est plus nécessaire.
Utilisation de Invoke-RestMethod
La cmdlet Invoke-RestMethod
concerne davantage l’envoi d’une requête HTTP ou HTTPS à un service web RESTful. Cette cmdlet est plus adaptée pour les requêtes qui interagissent avec des API REST telles que Microsoft Graph API.
Lorsqu’il s’agit de télécharger des fichiers directement depuis le web, Invoke-RestMethod
est un excellent concurrent. Ne vous laissez pas tromper en pensant le contraire. Il n’y a pas beaucoup de différence entre l’utilisation de Invoke-RestMethod
et Invoke-WebRequest
lorsqu’ils sont utilisés pour télécharger des fichiers à partir d’un lien web direct.
Télécharger un fichier avec Invoke-RestMethod
Pour télécharger un fichier avec Invoke-RestMethod
, utilisez la syntaxe ci-dessous. Vous remarquerez que la commande utilise les mêmes paramètres que Invoke-WebRequest
.
Dans le code exemple ci-dessous, le fichier est téléchargé à partir de la valeur URL dans la variable $source
. Ensuite, il est enregistré dans le chemin défini dans la variable $destination
.
Si la source nécessite une authentification, vous pouvez transmettre les informations d’identification en utilisant le paramètre -Credential
. L’exemple ci-dessous demande les informations d’identification et les stocke dans la variable $credential
. La valeur de la variable $credential
est ensuite transmise au paramètre -Credential
.
De plus, étant donné que le lien du fichier est une source HTTP et non HTTPS, cela signifie que vous envoyez une authentification non chiffrée. En général, vous devriez éviter d’utiliser des sources HTTP pour des raisons de sécurité. Cependant, si vous devez utiliser une source HTTP, vous devez ajouter l’option -AllowUnencryptedAuthentication
à votre commande.
Utilisation de Start-BitsTransfer
Start-BitsTransfer
est spécialement conçu pour le transfert de fichiers entre des ordinateurs clients et serveurs. Cette cmdlet PowerShell dépend du Background Intelligent Transfer Service (BITS) qui est natif du système d’exploitation Windows.
Parce que Start-BitsTransfer
nécessite que BITS fonctionne, cela signifie que cette cmdlet n’est pas disponible sur les ordinateurs non-Windows. D’un autre côté, Start-BitsTransfer
bénéficie des avantages de BITS lui-même. Certains de ces avantages sont:
- Sensibilisation à la bande passante et à l’utilisation du réseau.
- Gestion des interruptions (reprise, auto-reprise, pause, etc.)
- Téléchargement de plusieurs fichiers en tant que travaux en arrière-plan.
- Capacité à définir les priorités des travaux de téléchargement.
Téléchargement d’un fichier
La manière fondamentale d’utiliser Start-BitsTransfer
dans PowerShell pour télécharger un fichier est de spécifier une source et une destination. En utilisant le script ci-dessous, vous avez seulement besoin de changer les valeurs de $source
et $destination
selon vos besoins.
Comme vous pouvez le voir dans la démo ci-dessous, le fichier est téléchargé dans le chemin c:\dload\100MB.zip.

Supposez que la destination n’est pas spécifiée,
Start-BitsTransfer
télécharge et sauvegarde le fichier dans le répertoire de travail actuel. Par exemple, si vous exécutezStart-BitsTransfer
depuis C:\dload, le fichier est téléchargé dans le même répertoire.
Pour les téléchargements nécessitant une authentification, Start-BitsTransfer
dispose d’un paramètre -Credential
qui accepte un objet PSCredential.
Téléchargement de plusieurs fichiers
Pour démontrer le téléchargement de plusieurs fichiers, vous aurez besoin de créer un fichier CSV avec deux colonnes. Nommez le fichier filelist.txt. La première colonne doit contenir le lien vers la source, tandis que la deuxième colonne doit contenir le chemin de destination. Le contenu du fichier ressemblerait à celui ci-dessous.
Connexe: Gestion des fichiers CSV en PowerShell avec Import-Csv
Une fois que le fichier CSV est prêt, utilisez la commande ci-dessous pour commencer le téléchargement du fichier. La commande importe le fichier CSV en utilisant Import-Csv
et transmet le contenu à Start-BitsTransfer
.
Référez-vous à la démo ci-dessous pour voir comment fonctionne le code ci-dessus. Comme vous pouvez le voir, le téléchargement commence et vous pouvez suivre la progression du téléchargement. L’invite PowerShell n’est pas disponible pendant le processus de téléchargement.

Supposons que vous souhaitiez démarrer le processus de téléchargement en arrière-plan. Pour ce faire, vous devez simplement ajouter le commutateur -Asynchronous
à la fin de la commande Start-BitsTransfer
.
Initialement, l’état de chaque tâche montrerait la connexion. La capture d’écran ci-dessous montre l’identifiant de chaque tâche de téléchargement de fichier.

Maintenant que vous avez démarré le processus de téléchargement, vous voudrez vérifier si le téléchargement a été terminé. Pour vérifier l’état de la tâche de téléchargement, utilisez la cmdlet Get-BitsTransfer
. Comme vous pouvez le voir ci-dessous, l’état des tâches de téléchargement est passé à Transferred.

Utilisation de la classe WebClient et de la classe HttpClient (.NET Framework)
PowerShell est basé sur .NET, et sa nature lui permet de tirer parti de la puissance de .NET lui-même. Il existe deux classes .NET que vous pouvez utiliser dans PowerShell pour télécharger des fichiers ; WebClient et HttpClient.
Si vous souhaitez en savoir plus sur ces deux classes .NET d’une manière plus développement et technique, vous pourriez commencer par → Quand utiliser WebClient vs. HttpClient vs. HttpWebRequest. Dans la section suivante, vous apprendrez comment utiliser WebClient et HttpClient en PowerShell pour télécharger des fichiers depuis le web.
Téléchargement d’un fichier en utilisant System.Net.WebClient
Pour utiliser la classe WebClient, vous devez initialiser un objet en tant que type System.Net.WebClient
. Dans l’exemple ci-dessous, le $webClient
est le nouvel objet System.Net.WebClient
. Ensuite, en utilisant la méthode DownloadFile()
, vous démarrez le téléchargement du fichier à partir de la source.
Connexe: Utilisation des accélérateurs de types de données PowerShell pour accélérer le codage
Veuillez copier le code ci-dessous et l’exécuter dans votre session PowerShell pour tester. Notez que vous ne verrez aucun progrès ou sortie à l’écran sauf s’il y a une erreur. Cependant, l’invite PowerShell sera verrouillée jusqu’à ce que le téléchargement soit terminé.
Si la source nécessite une authentification pour autoriser le téléchargement du fichier, vous pouvez utiliser le code ci-dessous. La première ligne demande les informations d’identification et les stocke dans la variable $credentials
. La valeur de $credential
est ensuite incluse dans la demande de téléchargement du fichier.
Selon ce document Microsoft: « Nous ne recommandons pas d’utiliser la classe WebClient pour un nouveau développement. Utilisez plutôt la classe System.Net.Http.HttpClient. »
Il semble que la classe WebClient soit obsolète et que la nouvelle classe recommandée par Microsoft soit la classe HttpClient. Ne vous inquiétez pas, cependant. La prochaine section explique comment utiliser la classe HttpClient en PowerShell pour télécharger des fichiers depuis le web.
Téléchargement d’un fichier à l’aide de System.Net.Http.HttpClient
Tout comme la classe WebClient, vous devez d’abord créer le System.Net.Http.HttpClient
. En utilisant le code ci-dessous, le fichier est téléchargé depuis la $source
vers la $destination
. Référez-vous aux commentaires au-dessus de chaque ligne pour savoir ce que fait chaque ligne de code.
Le code ci-dessous est en direct, et vous pouvez le tester en l’exécutant dans votre session PowerShell.
Dans les situations où le téléchargement d’un fichier nécessite une authentification, vous devez ajouter les informations d’identification à l’objet HttpClient. Pour inclure des informations d’identification dans la demande de téléchargement de fichier, créez un nouvel objet System.Net.Http.HttpClientHandler
pour stocker les informations d’identification.
Vous pouvez copier le code ci-dessous et l’exécuter dans PowerShell pour le tester. Ou vous pouvez également l’exécuter en tant que script PowerShell. Dans cet exemple, le code est enregistré sous le nom de download-file.ps1.
La démo ci-dessous montre le résultat lors de l’exécution du script PowerShell pour télécharger le fichier.
Au départ, le répertoire ne contient que le fichier de script. Il y a une invite pour entrer le nom d’utilisateur et le mot de passe. Ensuite, le script procède au téléchargement du fichier. Après avoir téléchargé le fichier, vous pouvez voir que le nouveau fichier se trouve maintenant dans le répertoire de destination.

Conclusion
Windows PowerShell et PowerShell Core sont dotés de capacités intégrées pour télécharger des fichiers, agissant comme une alternative à PowerShell wget! Que vous téléchargiez des sources protégées par mot de passe, un seul fichier ou plusieurs fichiers, une méthode PowerShell est disponible pour vous.
Les méthodes de téléchargement de fichiers couvertes dans cet article fonctionnent à la fois sur Windows PowerShell et PowerShell Core. Cela signifie que ces méthodes s’appliquent à la fois aux systèmes Windows et non Windows, à l’exception de Start-BitsTransfer
.
Et comme PowerShell est plus qu’une invite de commande, vous pouvez traduire ce que vous avez appris en scripts. Pour vous, cela signifie une opportunité d’automatisation. Plus besoin de copier des URL, de cliquer sur des liens et d’attendre les téléchargements manuellement.
Source:
https://adamtheautomator.com/powershell-download-file/