Invoke-RestMethod
Envoie une demande HTTP ou HTTPS à un service web RESTful.
Syntaxe
Invoke-RestMethod
[-Method <WebRequestMethod>]
[-UseBasicParsing]
[-Uri] <Uri>
[-WebSession <WebRequestSession>]
[-SessionVariable <String>]
[-Credential <PSCredential>]
[-UseDefaultCredentials]
[-CertificateThumbprint <String>]
[-Certificate <X509Certificate>]
[-UserAgent <String>]
[-DisableKeepAlive]
[-TimeoutSec <Int32>]
[-Headers <IDictionary>]
[-MaximumRedirection <Int32>]
[-Proxy <Uri>]
[-ProxyCredential <PSCredential>]
[-ProxyUseDefaultCredentials]
[-Body <Object>]
[-ContentType <String>]
[-TransferEncoding <String>]
[-InFile <String>]
[-OutFile <String>]
[-PassThru]
[<CommonParameters>]
Description
L’applet Invoke-RestMethod
de commande envoie des requêtes HTTP et HTTPS aux services web REST (Representational State Transfer) qui retournent des données richement structurées.
PowerShell met en forme la réponse basée sur le type de données. Pour un flux RSS ou ATOM, PowerShell retourne les nœuds XML Item ou Entry. Pour JavaScript Object Notation (JSON) ou XML, PowerShell convertit ou désérialise le contenu en [PSCustomObject]
objets.
Remarque
Lorsque le point de terminaison REST retourne plusieurs objets, les objets sont reçus sous forme de tableau. Si vous dirigez la sortie vers Invoke-RestMethod
une autre commande, elle est envoyée en tant qu’objet unique [Object[]]
. Le contenu de ce tableau n’est pas énuméré pour la commande suivante sur le pipeline.
Cette applet de commande est 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 commutateur UseBasicParsing pour supprimer cela.
Exemples
Exemple 1 : Obtenir le flux RSS PowerShell
Invoke-RestMethod -Uri https://devblogs.microsoft.com/powershell/feed/ |
Format-Table -Property Title, pubDate
Title pubDate
----- -------
Join the PowerShell 10th Anniversary Celebration! Tue, 08 Nov 2016 23:00:04 +0000
DSC Resource Kit November 2016 Release Thu, 03 Nov 2016 00:19:07 +0000
PSScriptAnalyzer Community Call - Oct 18, 2016 Thu, 13 Oct 2016 17:52:35 +0000
New Home for In-Box DSC Resources Sat, 08 Oct 2016 07:13:10 +0000
New Social Features on Gallery Fri, 30 Sep 2016 23:04:34 +0000
PowerShellGet and PackageManagement in PowerShell Gallery and GitHub Thu, 29 Sep 2016 22:21:42 +0000
PowerShell Security at DerbyCon Wed, 28 Sep 2016 01:13:19 +0000
DSC Resource Kit September Release Thu, 22 Sep 2016 00:25:37 +0000
PowerShell DSC and implicit remoting broken in KB3176934 Tue, 23 Aug 2016 15:07:50 +0000
PowerShell on Linux and Open Source! Thu, 18 Aug 2016 15:32:02 +0000
Cette commande utilise l’applet Invoke-RestMethod
de commande pour obtenir des informations à partir du flux RSS du blog PowerShell. La commande utilise l’applet Format-Table
de commande pour afficher les valeurs des propriétés Title et pubDate de chaque blog dans une table.
Exemple 2
Dans l’exemple suivant, un utilisateur s’exécute Invoke-RestMethod
pour effectuer une requête POST sur un site web intranet dans l’organisation de l’utilisateur.
$Cred = Get-Credential
# Next, allow the use of self-signed SSL certificates.
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $True }
# Create variables to store the values consumed by the Invoke-RestMethod command.
# The search variable contents are later embedded in the body variable.
$Server = 'server.contoso.com'
$Url = "https://${server}:8089/services/search/jobs/export"
$Search = "search index=_internal | reverse | table index,host,source,sourcetype,_raw"
# The cmdlet handles URL encoding. The body variable describes the search criteria, specifies CSV as
# the output mode, and specifies a time period for returned data that starts two days ago and ends
# one day ago. The body variable specifies values for parameters that apply to the particular REST
# API with which Invoke-RestMethod is communicating.
$Body = @{
search = $Search
output_mode = "csv"
earliest_time = "-2d@d"
latest_time = "-1d@d"
}
# Now, run the Invoke-RestMethod command with all variables in place, specifying a path and file
# name for the resulting CSV output file.
Invoke-RestMethod -Method Post -Uri $url -Credential $Cred -Body $body -OutFile output.csv
{"preview":true,"offset":0,"result":{"sourcetype":"contoso1","count":"9624"}}
{"preview":true,"offset":1,"result":{"sourcetype":"contoso2","count":"152"}}
{"preview":true,"offset":2,"result":{"sourcetype":"contoso3","count":"88494"}}
{"preview":true,"offset":3,"result":{"sourcetype":"contoso4","count":"15277"}}
Exemple 3 : Passer plusieurs en-têtes
Cet exemple montre comment passer plusieurs en-têtes d’un hash-table
à une API REST.
$headers = @{
'userId' = 'UserIDValue'
'token' = 'TokenValue'
}
Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $body
Les API nécessitent souvent des en-têtes passés pour l’authentification, la validation, etc.
Exemple 3 : Envoi de données de formulaire
Lorsque le corps est un formulaire ou qu’il s’agit de la sortie d’un autre 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.Forms[0]
Exemple 4 : Énumérer les éléments retournés sur le pipeline
GitHub retourne plusieurs objets dans un tableau. Si vous dirigez la sortie vers une autre commande, elle est envoyée en tant qu’objet unique [Object[]]
.
Pour énumérer les objets dans le pipeline, dirigez les résultats vers Write-Output
ou encapsulez l’applet de commande entre parenthèses. L’exemple suivant compte le nombre d’objets retournés par GitHub. Compte ensuite le nombre d’objets énumérés dans le pipeline.
$uri = 'https://api.github.com/repos/microsoftdocs/powershell-docs/issues'
$x = 0
Invoke-RestMethod -Uri $uri | ForEach-Object { $x++ }
$x
1
$x = 0
(Invoke-RestMethod -Uri $uri) | ForEach-Object { $x++ }
$x
30
$x = 0
Invoke-RestMethod -Uri $uri | Write-Output | ForEach-Object { $x++ }
$x
30
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-RestMethod
.
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.
Quand l'entrée est une demande GET et que le corps est un IDictionary (en général, une table de hachage), le corps est ajouté à l'URI en tant que paramètres de requête. Pour d'autres types de demandes (par exemple POST), le corps est défini comme valeur du corps de la demande au format nom standard=valeur.
Avertissement
La sortie détaillée d’un corps POST se termine with -1-byte payload
par , même si la taille du corps est connue et envoyée dans l’en-tête Content-Length
HTTP.
Type: | Object |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | True |
Accepter les caractères génériques: | 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 une autorité suffisante, la commande échoue.
Type: | X509Certificate |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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-RestMethod
définit le type de contenu sur « application/x-www-form-urlencoded ». Sinon, le type de contenu n'est pas spécifié dans l'appel.
Type: | String |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeur par défaut: | Current user |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-DisableKeepAlive
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 |
Valeur par défaut: | KeepAlive |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 des en-têtes UserAgent ou de cookie.
Type: | IDictionary |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-MaximumRedirection
Détermine combien de fois Windows PowerShell redirige une connexion vers un autre URI (Uniform Resource Identifier) avant que la connexion échoue. La valeur par défaut est 5. La valeur 0 (zéro) empêche toute redirection.
Type: | Int32 |
Position: | Named |
Valeur par défaut: | 5 |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeurs acceptées: | Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch |
Position: | Named |
Valeur par défaut: | Default |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-OutFile
Enregistre le corps de la réponse dans le fichier de sortie spécifié. 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-RestMethod
retourne les résultats au pipeline.
Type: | String |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-PassThru
Ce paramètre est valide uniquement lorsque le paramètre OutFile est également utilisé dans la commande. L’intention est d’écrire les résultats dans le fichier et dans le pipeline.
Remarque
Lorsque vous utilisez le paramètre PassThru , la sortie est écrite dans le pipeline, mais le fichier est vide. Pour plus d’informations, consultez Le problème PowerShell #15409.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | No output |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Proxy
Utilise un serveur proxy pour la demande, au lieu de se connecter directement à la ressource Internet. Entrez l'URI d'un serveur proxy du réseau.
Type: | Uri |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeur par défaut: | Current user |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-ProxyUseDefaultCredentials
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 |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-SessionVariable
Crée une variable contenant la session de requête web. Entrez un nom de variable sans symbole de signe dollar ($
).
Lorsque vous spécifiez une variable de session, Invoke-RestMethod
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 |
Alias: | SV |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeur par défaut: | 0 |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 |
Valeurs acceptées: | chunked, compress, deflate, gzip, identity |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Uri
Spécifie l'URI (Uniform Resource Identifier) de la ressource Internet à laquelle la demande web est envoyée. Ce paramètre prend en charge les valeurs HTTP, HTTPS, FTP et FILE.
Ce paramètre est obligatoire. Le nom du paramètre (Uri) est facultatif.
Type: | Uri |
Position: | 0 |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-UseBasicParsing
Indique que l’applet de commande utilise l’analyse de base. L’applet de commande retourne le code HTML brut dans un objet String .
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-UseDefaultCredentials
Utilise les informations d'identification de l'utilisateur actuel pour envoyer la demande web.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-UserAgent
Spécifie une chaîne d'agent utilisateur pour la demande web.
L'agent utilisateur par défaut est semblable à « Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 » avec de légères variantes selon le système d'exploitation et la 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, Internet Explorer, Opera et Safari.
Type: | String |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | 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 signe dollar) dans la valeur du paramètre SessionVariable d’une Invoke-RestMethod
commande. Invoke-RestMethod
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 |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
Entrées
Vous pouvez diriger le corps d’une requête web vers cette applet de commande.
Sorties
Lorsque la requête retourne un entier, cette applet de commande retourne cet entier.
Lorsque la requête retourne une chaîne, cette applet de commande retourne cette chaîne.
Lorsque la requête retourne du code XML valide, cette applet de commande la renvoie en tant que XmlDocument.
PSObject
Lorsque la requête retourne des chaînes JSON, cette applet de commande retourne un PSObject représentant les données.
Notes
Windows PowerShell inclut les alias suivants pour Invoke-RestMethod
:
irm