Avez-vous déjà voulu naviguer sur le web via la ligne de commande ? Ouais. Moi non plus. Mais avez-vous déjà eu besoin d’extraire des informations d’une page web, de surveiller un site web ou de soumettre des informations via l’automatisation ? Moi oui, et j’utilise Invoke-Webrequest pour le faire !
Le cmdlet PowerShell Invoke-WebRequest
est le couteau suisse du web. Ce cmdlet peut envoyer n’importe quelle verbe HTTP à un service web avec des choses courantes comme des paramètres HTTP, spécifier différents en-têtes HTTP, et ainsi de suite. Invoke-WebRequest
avec son frère, Invite-RestMethod
, sont les deux cmdlets PowerShell que vous voudrez vous familiariser si vous avez besoin de faire de l’automatisation web.
Le cmdlet Invoke-WebRequest
fait partie du module Microsoft.PowerShell.Utility fourni avec Windows PowerShell et PowerShell Core. Ce cmdlet est inclus avec PowerShell depuis la version 3 et c’est un outil extrêmement puissant mais facile à utiliser.
En utilisant Invoke-WebRequest
, PowerShell permet à un développeur de travailler avec des sites web, des services web et des APIs REST de différentes manières.
Utilisation de base
Au niveau le plus basique, le cmdlet Invoke-WebRequest
envoie une méthode de requête HTTP vers un point d’extrémité tel qu’une URI ou une URL. Le cmdlet prend en charge toutes les méthodes de requête courantes.
De loin, la méthode la plus courante est la méthode GET. Cette méthode lit des informations telles que des informations provenant d’un site Web ou peut-être interroger une API REST. La méthode est définie en utilisant le paramètre Method
. Comme nous avons besoin d’un point de terminaison à interroger, nous aurons également besoin d’une URI. Pour simplifier les choses, je vais choisir n’importe quel site Web. Pour promouvoir sans vergogne TechSnips, je choisirai techsnips.io.
Disons que je veux obtenir une liste de toutes les vidéos publiées les plus récentes comme indiqué ci-dessous.

I can get an HTML representation of this page by running Invoke-WebRequest -Uri 'https://techsnips.io' -Method GET
. When I do this, Invoke-WebRequest
downloads the entire web page and returns an output with various parsed information around the elements of the page.

Pour obtenir les vidéos, je vais devoir faire quelques recherches. Lorsque je regarde la propriété des liens, je vois une similarité selon laquelle tous les liens vidéo ont une classe de ng-binding
comme indiqué ci-dessous.

Une fois que je le sais, je peux alors trouver tous ces éléments et ne retourner que la propriété innerHTML
et voilà!

Téléchargement de fichiers avec Invoke-WebRequest
Nous pouvons également utiliser Invoke-WebRequest
pour télécharger des fichiers depuis le Web et c’est vraiment facile ! Nous pouvons télécharger des fichiers en pointant simplement Invoke-WebRequest
vers une URI d’un fichier et en utilisant le paramètre OutFile
pour indiquer à la cmdlet de sauvegarder le fichier sur le disque local.
Par exemple, ci-dessous je télécharge l’utilitaire Handle de SysInternals et je décompresse le fichier zip une fois téléchargé. C’est vraiment aussi simple que ça!
Soumission d’un formulaire et travail avec des sessions
Nous pouvons utiliser Invoke-WebRequest
pour remplir également des formulaires. Pour ce faire, nous avons généralement besoin de travailler avec des sessions Web. HTTP est un protocole naturellement sans état et votre navigateur (dans ce cas PowerShell) doit être capable de créer une session qui sera utilisée pour suivre des éléments tels que les cookies, par exemple. Un formulaire courant est un formulaire de connexion avec nom d’utilisateur/mot de passe, alors connectons-nous à un site Web fictif !
Disons que notre formulaire de connexion fictif est à l’URL http://somewebsite.com. Nous devrions d’abord exécuter Invoke-WebRequest
pour télécharger la structure HTML et créer une session.
Une fois cela fait, la réponse aura une propriété Forms
que nous pouvons remplir avec un nom d’utilisateur et un mot de passe. Dans ce cas, le nom d’utilisateur est représenté par un champ appelé user
et le mot de passe doit être dans un champ appelé password
. Cela dépendra de la page Web.
Une fois le formulaire rempli, nous pouvons utiliser à nouveau Invoke-WebRequest
, mais cette fois réutiliser la session que nous venons de créer et déterminer automatiquement l’URI à laquelle l’envoyer en lisant la propriété Action
qui se trouve sur le formulaire, comme indiqué ci-dessous.
Si vous avez correctement saisi tous les noms de champs appropriés et que la page Web ne fait rien d’excentrique, vous devriez être connecté avec le nom d’utilisateur et le mot de passe à l’intérieur de la variable de session Web $rb
. À ce stade, vous pouvez lire diverses pages derrière cette authentification si vous utilisez la variable de session Web $rb
.
Résolution des URIs courts
Enfin, un autre excellent usage de Invoke-WebRequest
est de résoudre les URI courts. Peut-être avez-vous besoin de savoir ce qui se cache derrière cette URL raccourcie mais ne voulez pas cliquer dessus pour le découvrir ! Pas de problème. En utilisant Invoke-WebRequest
, nous pouvons lire la propriété AbsoluteUri
à partir de la réponse analysée qu’elle nous donne!
Remarquez ci-dessous que j’utilise également le paramètre UseBasicParsing
. Par défaut, Invoke-WebRequest
essaie d’utiliser Internet Explorer (IE) pour analyser le HTML retourné. Cela ne fonctionne pas sur les systèmes sans IE. Pour contourner cela, nous pouvons utiliser le paramètre UseBasicParsing
pour toujours télécharger le contenu mais seulement le parcourir légèrement.
Résumé
Le cmdlet Invoke-WebRequest
est l’un des cmdlets les plus polyvalents de PowerShell. S’il y a une action qui peut être effectuée via un navigateur graphique typique, le cmdlet Invoke-WebRequest
peut également le faire. Vous pouvez trouver un exemple d’utilisation de ce cmdlet en consultant cet article sur la surveillance des API REST.