Invoke-WebRequest
Obtient le contenu d’une page web sur Internet.
Syntax
Invoke-WebRequest
[-UseBasicParsing]
[-Uri] <Uri>
[-WebSession <WebRequestSession>]
[-SessionVariable <String>]
[-Credential <PSCredential>]
[-UseDefaultCredentials]
[-CertificateThumbprint <String>]
[-Certificate <X509Certificate>]
[-UserAgent <String>]
[-DisableKeepAlive]
[-TimeoutSec <Int32>]
[-Headers <IDictionary>]
[-MaximumRedirection <Int32>]
[-Method <WebRequestMethod>]
[-Proxy <Uri>]
[-ProxyCredential <PSCredential>]
[-ProxyUseDefaultCredentials]
[-Body <Object>]
[-ContentType <String>]
[-TransferEncoding <String>]
[-InFile <String>]
[-OutFile <String>]
[-PassThru]
[<CommonParameters>]
Description
L’applet Invoke-WebRequest
de commande envoie des requêtes HTTP, HTTPS, FTP et FILE à une page web ou un service web. Elle analyse la réponse et retourne des collections de formulaires, des liens, des images et d'autres éléments HTML significatifs.
Cette applet de commande a été introduite dans Windows PowerShell 3.0.
Remarque
Par défaut, le code de script dans la page web peut être exécuté lorsque la page est analysée pour remplir la ParsedHtml
propriété. Utilisez le -UseBasicParsing
commutateur pour supprimer cela.
Important
Les exemples de cet article référencent les hôtes dans le contoso.com
domaine. Il s’agit d’un domaine fictif utilisé par Microsoft pour des exemples. Les exemples sont conçus pour montrer comment utiliser les applets de commande.
Toutefois, étant donné que les contoso.com
sites n’existent pas, les exemples ne fonctionnent pas. Adaptez les exemples aux hôtes dans votre environnement.
Exemples
Exemple 1 : Envoyer une requête web
Cet exemple utilise l’applet Invoke-WebRequest
de commande pour envoyer une requête web au site Bing.com.
$Response = Invoke-WebRequest -UseBasicParsing -URI https://www.bing.com?q=how+many+feet+in+a+mile
$Response.InputFields |
Where-Object name -like "* Value" |
Select-Object name, value
name value
---- -----
From Value 1
To Value 5280
Les données retournées par Invoke-WebRequest
sont stockées dans la $Response
variable. La propriété InputFields de la réponse contient les champs de formulaire. Where-Object
est utilisé pour filtrer les champs de formulaire vers ceux où la propriété name est semblable à « * Value ». Les résultats filtrés sont redirigés pour Select-Object
sélectionner les propriétés nom et valeur .
Exemple 2 : Utiliser un service web avec état
Cet exemple montre comment utiliser l’applet Invoke-WebRequest
de commande avec un service web avec état, tel que Facebook.
$R = Invoke-WebRequest https://www.facebook.com/login.php -SessionVariable fb
# This command stores the first form in the Forms property of the $R variable in the $Form variable.
$Form = $R.Forms[0]
# This command shows the fields available in the Form.
$Form.fields
Key Value
--- -----
...
email
pass
...
# These commands populate the username and password of the respective Form fields.
$Form.Fields["email"]="User01@Fabrikam.com"
$Form.Fields["pass"]="P@ssw0rd"
# This command creates the Uri that will be used to log in to facebook.
# The value of the Uri parameter is the value of the Action property of the form.
$Uri = "https://www.facebook.com" + $Form.Action
# Now the Invoke-WebRequest cmdlet is used to sign into the Facebook web service.
# The WebRequestSession object in the $FB variable is passed as the value of the WebSession parameter.
# The value of the Body parameter is the hash table in the Fields property of the form.
# The value of the *Method* parameter is POST. The command saves the output in the $R variable.
$R = Invoke-WebRequest -Uri $Uri -WebSession $FB -Method POST -Body $Form.Fields
$R.StatusDescription
La première commande utilise l’applet Invoke-WebRequest
de commande pour envoyer une demande de connexion. La commande spécifie la valeur « FB » pour la valeur du paramètre SessionVariable et enregistre le résultat dans la $R
variable. Une fois la commande terminée, la $R
variable contient un HtmlWebResponseObject et la $FB
variable contient un objet WebRequestSession .
Une fois que l’applet Invoke-WebRequest
de commande se connecte à facebook, la propriété StatusDescription de l’objet de réponse web dans la $R
variable indique que l’utilisateur est connecté avec succès.
Exemple 3 : Obtenir des liens à partir d’une page web
Cette commande obtient les liens dans une page web.
(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href
L’applet Invoke-WebRequest
de commande obtient le contenu de la page web. Ensuite, la propriété Links du HtmlWebResponseObject retourné est utilisée pour afficher la propriété Href de chaque lien.
Exemple 4 : Intercepter les messages non réussis à partir d’Invoke-WebRequest
Lorsque Invoke-WebRequest
vous rencontrez un message HTTP non réussi (404, 500, etc.), il ne retourne aucune sortie et génère une erreur de fin. Pour intercepter l’erreur et afficher StatusCode , vous pouvez placer l’exécution dans un try/catch
bloc.
try
{
$Response = Invoke-WebRequest -Uri "www.microsoft.com/unkownhost"
# This will only execute if the Invoke-WebRequest is successful.
$StatusCode = $Response.StatusCode
}
catch
{
$StatusCode = $_.Exception.Response.StatusCode.value__
}
$StatusCode
404
L’erreur de fin est interceptée par le catch
bloc, qui récupère StatusCode à partir de l’objet Exception .
Exemple 8 : Télécharger plusieurs fichiers en même temps
L’applet Invoke-WebRequest
de commande ne peut télécharger qu’un seul fichier à la fois. L’exemple suivant utilise Start-ThreadJob
pour créer plusieurs travaux de thread pour télécharger plusieurs fichiers en même temps.
$baseUri = 'https://github.com/PowerShell/PowerShell/releases/download'
$files = @(
@{
Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.msi"
OutFile = 'PowerShell-7.3.0-preview.5-win-x64.msi'
},
@{
Uri = "$baseUri/v7.3.0-preview.5/PowerShell-7.3.0-preview.5-win-x64.zip"
OutFile = 'PowerShell-7.3.0-preview.5-win-x64.zip'
},
@{
Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.msi"
OutFile = 'PowerShell-7.2.5-win-x64.msi'
},
@{
Uri = "$baseUri/v7.2.5/PowerShell-7.2.5-win-x64.zip"
OutFile = 'PowerShell-7.2.5-win-x64.zip'
}
)
$jobs = @()
foreach ($file in $files) {
$jobs += Start-ThreadJob -Name $file.OutFile -ScriptBlock {
$params = $using:file
Invoke-WebRequest @params
}
}
Write-Host "Downloads started..."
Wait-Job -Job $jobs
foreach ($job in $jobs) {
Receive-Job -Job $job
}
Remarque
Pour utiliser l’applet Start-ThreadJob
de commande, vous devez installer le module ThreadJob à partir de PowerShell Gallery.
Paramètres
-Body
Spécifie le corps de la demande. Le corps est le contenu de la demande qui suit les en-têtes.
Vous pouvez également diriger une valeur de corps vers Invoke-WebRequest
.
Le paramètre Body peut être utilisé pour spécifier une liste de paramètres de requête ou spécifier le contenu de la réponse.
Lorsque l’entrée est une requête GET et que le corps est un IDictionary (généralement, une table de hachage), le corps est ajouté à l’URI en tant que paramètres de requête. Pour d’autres types de requêtes (tels que POST), le corps est défini comme valeur du corps de la requête au format standard name=value
.
Lorsque le corps est un formulaire ou qu’il s’agit de la sortie d’un Invoke-WebRequest
appel, PowerShell définit le contenu de la demande sur les champs du formulaire.
Par exemple :
$r = Invoke-WebRequest https://website.com/login.aspx
$r.Forms\[0\].Name = "MyName"
$r.Forms\[0\].Password = "MyPassword"
Invoke-RestMethod https://website.com/service.aspx -Body $r
- ou -
Invoke-RestMethod https://website.com/service.aspx -Body $r.Forms\[0\]
Type: | Object |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Certificate
Spécifie le certificat client utilisé pour une demande web sécurisée. Entrez une variable qui contient un certificat, ou bien une commande ou une expression qui obtient le certificat.
Pour rechercher un certificat, utilisez ou utilisez Get-PfxCertificate
l’applet Get-ChildItem
de commande dans le lecteur de certificat (Cert:
). Si le certificat n’est pas valide ou n’a pas d’autorité suffisante, la commande échoue.
Type: | X509Certificate |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CertificateThumbprint
Spécifie le certificat de clé publique numérique (X509) d'un compte d'utilisateur qui a l'autorisation d'envoyer la demande. Entrez l’empreinte numérique du certificat.
Les certificats sont utilisés dans l'authentification par certificat client. Les certificats ne peuvent être mappés qu’à des comptes d’utilisateur locaux, et non à des comptes de domaine.
Pour afficher l’empreinte numérique du certificat, utilisez la ou Get-ChildItem
la Get-Item
commande pour rechercher le certificat dans Cert:\CurrentUser\My
.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ContentType
Spécifie le type de contenu de la demande web.
Si ce paramètre est omis et que la méthode de requête est POST, Invoke-WebRequest
définit le type application/x-www-form-urlencoded
de contenu sur . Sinon, le type de contenu n’est pas spécifié dans l’appel.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Spécifie un compte d'utilisateur qui a l'autorisation d'envoyer la demande. La valeur par défaut est l’utilisateur actuel.
Tapez un nom d’utilisateur, tel que User01 ou Domain01\User01, ou entrez un objet PSCredential généré par l’applet Get-Credential
de commande.
Les informations d’identification sont stockées dans un objet PSCredential et le mot de passe est stocké en tant que SecureString.
Remarque
Pour plus d’informations sur la protection des données SecureString , consultez Comment secure is SecureString ?.
Type: | PSCredential |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DisableKeepAlive
Indique que l’applet de commande définit la valeur KeepAlive dans l’en-tête HTTP sur False. Par défaut, KeepAlive a la valeur True. KeepAlive établit une connexion persistante au serveur pour faciliter les demandes suivantes.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Headers
Spécifie les en-têtes de la demande web. Entrez une table de hachage ou un dictionnaire.
Pour définir des en-têtes UserAgent , utilisez le paramètre UserAgent . Vous ne pouvez pas utiliser ce paramètre pour spécifier les en-têtes UserAgent ou cookie.
Type: | IDictionary |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InFile
Obtient le contenu de la demande web à partir d'un fichier.
Entrez un chemin d'accès et un nom de fichier. Si vous omettez le chemin d'accès, la valeur par défaut est l'emplacement actuel.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaximumRedirection
Spécifie le nombre de fois où PowerShell redirige une connexion vers un autre URI (Uniform Resource Identifier) avant l’échec de la connexion. La valeur par défaut est 5. La valeur 0 (zéro) empêche toute redirection.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Method
Spécifie la méthode utilisée pour la demande web. Les valeurs valides pour ce paramètre sont :
Default
Delete
Get
Head
Merge
Options
Patch
Post
Put
Trace
Type: | WebRequestMethod |
Accepted values: | Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutFile
Spécifie le fichier de sortie pour lequel cette applet de commande enregistre le corps de la réponse. Entrez un chemin d'accès et un nom de fichier. Si vous omettez le chemin d'accès, la valeur par défaut est l'emplacement actuel.
Par défaut, Invoke-WebRequest
retourne les résultats au pipeline. Pour envoyer les résultats à un fichier et au pipeline, utilisez le paramètre Passthru .
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Indique que l’applet de commande retourne les résultats, en plus de les écrire dans un fichier. Ce paramètre est valide uniquement lorsque le paramètre OutFile est également utilisé dans la commande.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Proxy
Spécifie un serveur proxy pour la requête, au lieu de se connecter directement à la ressource Internet. Entrez l'URI d'un serveur proxy du réseau.
Type: | Uri |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyCredential
Spécifie un compte d’utilisateur autorisé à utiliser le serveur proxy spécifié par le paramètre Proxy . La valeur par défaut est l’utilisateur actuel.
Tapez un nom d’utilisateur, tel que User01
ou Domain01\User01
, ou entrez un objet PSCredential , tel qu’un objet généré par l’applet Get-Credential
de commande.
Ce paramètre est valide uniquement lorsque le paramètre proxy est également utilisé dans la commande. Vous ne pouvez pas utiliser les paramètres ProxyCredential et ProxyUseDefaultCredentials dans la même commande.
Type: | PSCredential |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyUseDefaultCredentials
Indique que l’applet de commande utilise les informations d’identification de l’utilisateur actuel pour accéder au serveur proxy spécifié par le paramètre Proxy .
Ce paramètre est valide uniquement lorsque le paramètre proxy est également utilisé dans la commande. Vous ne pouvez pas utiliser les paramètres ProxyCredential et ProxyUseDefaultCredentials dans la même commande.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SessionVariable
Spécifie une variable pour laquelle cette applet de commande crée une session de requête web et l’enregistre dans la valeur.
Entrez un nom de variable sans symbole de signe dollar ($
).
Lorsque vous spécifiez une variable de session, Invoke-WebRequest
crée un objet de session de requête web et l’affecte à une variable portant le nom spécifié dans votre session PowerShell. Vous pouvez utiliser la variable dans votre session dès que la commande est terminée.
Contrairement à une session distante, la session de requête web n’est pas une connexion persistante. Il s’agit d’un objet qui contient des informations sur la connexion et la demande, notamment les cookies, les informations d’identification, la valeur de redirection maximale et la chaîne de l’agent utilisateur. Vous pouvez l'utiliser pour partager l'état et les données entre les demandes web.
Pour utiliser la session de requête web dans les requêtes web suivantes, spécifiez la variable de session dans la valeur du paramètre WebSession . PowerShell utilise les données de l’objet de session de requête web lors de l’établissement de la nouvelle connexion. Pour remplacer une valeur dans la session de requête web, utilisez un paramètre d’applet de commande, tel que UserAgent ou Credential. Les valeurs de paramètre sont prioritaires sur les valeurs de la session de demande web.
Vous ne pouvez pas utiliser les paramètres SessionVariable et WebSession dans la même commande.
Type: | String |
Aliases: | SV |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TimeoutSec
Spécifie la durée pendant laquelle la requête peut être en attente avant qu’elle expire. Entrez une valeur en secondes. La valeur par défaut, 0, spécifie un délai d'attente indéfini.
Une requête DNS (Domain Name System) peut prendre jusqu’à 15 secondes pour retourner ou expirer. Si votre requête contient un nom d’hôte qui nécessite une résolution et que vous définissez TimeoutSec sur une valeur supérieure à zéro, mais moins de 15 secondes, cela peut prendre 15 secondes ou plus avant qu’une exception WebException soit levée, et votre requête expire.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TransferEncoding
Spécifie une valeur pour l'en-tête de réponse HTTP de codage de transfert. Les valeurs valides pour ce paramètre sont :
Chunked
Compress
Deflate
GZip
Identity
Type: | String |
Accepted values: | chunked, compress, deflate, gzip, identity |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Uri
Spécifie l'URI (Uniform Resource Identifier) de la ressource Internet à laquelle la demande web est envoyée. Entrez un URI. Ce paramètre prend en charge les valeurs HTTP, HTTPS, FTP et FILE.
Ce paramètre est obligatoire. L’URI du nom de paramètre est facultatif.
Type: | Uri |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseBasicParsing
Indique que l’applet de commande utilise l’objet de réponse pour le contenu HTML sans analyse DOM (Document Object Model). Ce paramètre est obligatoire quand Internet Explorer n'est pas installé sur les ordinateurs, comme sur une installation minimale du serveur d'un système d'exploitation Windows Server.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseDefaultCredentials
Indique que l’applet de commande utilise les informations d’identification de l’utilisateur actuel pour envoyer la requête web.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UserAgent
Spécifie une chaîne d'agent utilisateur pour la demande web. L’agent utilisateur par défaut est similaire à Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0
de légères variations pour chaque système d’exploitation et plateforme.
Pour tester un site web avec la chaîne d’agent utilisateur standard utilisée par la plupart des navigateurs Internet, utilisez les propriétés de la classe PSUserAgent , telles que Chrome, FireFox, InternetExplorer, Opera et Safari. Par exemple, la commande suivante utilise la chaîne de l’agent utilisateur pour Internet Explorer : Invoke-WebRequest -Uri https://website.com/ -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WebSession
Spécifie une session de demande web. Entrez le nom de la variable, y compris le signe dollar ($
).
Pour remplacer une valeur dans la session de requête web, utilisez un paramètre d’applet de commande, tel que UserAgent ou Credential. Les valeurs de paramètre sont prioritaires sur les valeurs de la session de demande web.
Contrairement à une session à distance, la session de demande web n'est pas une connexion persistante. Il s'agit d'un objet qui contient des informations sur la connexion et la demande, notamment les cookies, les informations d'identification, la valeur maximale de la redirection et la chaîne d'agent utilisateur. Vous pouvez l'utiliser pour partager l'état et les données entre les demandes web.
Pour créer une session de requête web, entrez un nom de variable, sans une connexion dollar, dans la valeur du paramètre SessionVariable d’une Invoke-WebRequest
commande. Invoke-WebRequest
crée la session et l’enregistre dans la variable. Dans les commandes suivantes, utilisez la variable comme valeur du paramètre WebSession .
Vous ne pouvez pas utiliser les paramètres SessionVariable et WebSession dans la même commande.
Type: | WebRequestSession |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entrées
Vous pouvez diriger le corps d’une requête web vers cette applet de commande.
Sorties
Cette applet de commande retourne l’objet de réponse représentant le résultat de la requête web.
Notes
Windows PowerShell inclut les alias suivants pour Invoke-WebRequest
:
iwr
Liens associés
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour