Invoke-RestMethod
Envia uma solicitação HTTP ou HTTPS para um serviço Web RESTful.
Sintaxe
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
O Invoke-RestMethod
cmdlet envia solicitações HTTP e HTTPS para serviços Web REST (Representational State Transfer) que retornam dados ricamente estruturados.
O PowerShell formata a resposta com base no tipo de dados. Para um feed RSS ou ATOM, o PowerShell retorna os nós XML Item ou Entry. Para JSON (JavaScript Object Notation) ou XML, o PowerShell converte ou desserializa o conteúdo em [PSCustomObject]
objetos.
Observação
Quando o ponto de extremidade REST retorna vários objetos, os objetos são recebidos como uma matriz. Se você canalizar a saída para Invoke-RestMethod
outro comando, ela será enviada como um único [Object[]]
objeto. O conteúdo dessa matriz não é enumerado para o próximo comando no pipeline.
Este cmdlet é introduzido no Windows PowerShell 3.0.
Observação
Por padrão, o código de script na página da Web pode ser executado quando a página está sendo analisada para preencher a ParsedHtml
propriedade. Use a opção UseBasicParsing para suprimir isso.
Exemplos
Exemplo 1: Obter o feed RSS do 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
Esse comando usa o Invoke-RestMethod
cmdlet para obter informações do feed RSS do Blog do PowerShell. O comando usa o Format-Table
cmdlet para exibir os valores das propriedades Title e pubDate de cada blog em uma tabela.
Exemplo 2
No exemplo a seguir, um usuário é executado Invoke-RestMethod
para executar uma solicitação POST em um site da intranet na organização do usuário.
$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"}}
Exemplo 3: Passar vários cabeçalhos
Este exemplo demonstra como passar vários cabeçalhos de uma hash-table
para uma API REST.
$headers = @{
'userId' = 'UserIDValue'
'token' = 'TokenValue'
}
Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $body
As APIs geralmente exigem cabeçalhos passados para autenticação, validação etc.
Exemplo 3: Enviando dados de formulário
Quando o corpo é um formulário ou é a saída de outra Invoke-WebRequest
chamada, o PowerShell define o conteúdo da solicitação para os campos de formulário.
Por exemplo:
$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]
Exemplo 4: enumerar itens retornados no pipeline
O GitHub retorna vários objetos em uma matriz. Se você canalizar a saída para outro comando, ela será enviada como um único [Object[]]
objeto.
Para enumerar os objetos no pipeline, canalize os resultados ou Write-Output
encapsule o cmdlet entre parênteses. O exemplo a seguir conta o número de objetos retornados pelo GitHub. Em seguida, conta o número de objetos enumerados para o 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
Parâmetros
-Body
Especifica o corpo da solicitação. O corpo é o conteúdo da solicitação que segue os cabeçalhos.
Você também pode canalizar um valor de corpo para Invoke-RestMethod
.
O parâmetro Body pode ser usado para especificar uma lista de parâmetros de consulta ou especificar o conteúdo da resposta.
Quando a entrada é uma solicitação GET e o corpo é um IDictionary (normalmente, uma tabela de hash), o corpo é adicionado ao URI como parâmetros de consulta. Para outros tipos de solicitação (como POST), o corpo é definido como o valor do corpo da solicitação no formato padrão name=value.
Aviso
A saída detalhada de um corpo POST terminará com with -1-byte payload
, mesmo que o tamanho do corpo seja conhecido e enviado no Content-Length
cabeçalho HTTP.
Tipo: | Object |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-Certificate
Especifica o certificado do cliente que é usado para uma solicitação da Web segura. Insira uma variável que contém um certificado, comando ou expressão que obtém os objetos.
Para localizar um certificado, use Get-PfxCertificate
ou use o Get-ChildItem
cmdlet na unidade Certificado (Cert:
). Se o certificado não for válido ou não tiver autoridade suficiente, o comando falhará.
Tipo: | X509Certificate |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-CertificateThumbprint
Especifica o certificado de chave pública digital (X509) de uma conta de usuário com permissão para executar essa solicitação. Insira a impressão digital do certificado.
Certificados digitais são empregados na autenticação de clientes baseada em certificados. Os certificados só podem ser mapeados apenas para contas de usuário locais, não para contas de domínio.
Para ver a impressão digital do certificado, use o Get-Item
comando ou Get-ChildItem
para localizar o certificado em Cert:\CurrentUser\My
.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ContentType
Especifica o tipo de conteúdo da solicitação da Web.
Se esse parâmetro for omitido e o método de solicitação for POST, Invoke-RestMethod
definirá o tipo de conteúdo como "application/x-www-form-urlencoded". Caso contrário, o tipo de conteúdo não será especificado na chamada.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Credential
Especifica uma conta de usuário com permissão para enviar a solicitação. O padrão é o usuário atual.
Digite um nome de usuário, como User01 ou Domain01\User01, ou insira um objeto PSCredential gerado pelo Get-Credential
cmdlet.
As credenciais são armazenadas em um objeto PSCredential e a senha é armazenada como um SecureString.
Observação
Para obter mais informações sobre a proteção de dados do SecureString , consulte Quão seguro é o SecureString?.
Tipo: | PSCredential |
Cargo: | Named |
Valor padrão: | Current user |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-DisableKeepAlive
Define o valor KeepAlive no cabeçalho HTTP como False. Por padrão, KeepAlive é True. KeepAlive estabelece uma conexão persistente com o servidor para facilitar as solicitações subsequentes.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | KeepAlive |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Headers
Especifica os cabeçalhos da solicitação da Web. Insira uma tabela de hash ou dicionário.
Para definir cabeçalhos UserAgent, use o parâmetro UserAgent . Você não pode usar esse parâmetro para especificar cabeçalhos UserAgent ou de cookie.
Tipo: | IDictionary |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-InFile
Obtém o conteúdo da solicitação da Web de um arquivo.
Digite um caminho e nome de arquivo. Se você omitir o caminho, o padrão será o local atual.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-MaximumRedirection
Determina quantas vezes o Windows PowerShell redireciona uma conexão para um URI (Uniform Resource Identifier) alternativo antes de a conexão falhar. O valor padrão é 5. Um valor de 0 (zero) impede qualquer redirecionamento.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | 5 |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Method
Especifica o método usado para a solicitação da Web. Os valores aceitáveis para esse parâmetro são:
Default
Delete
Get
Head
Merge
Options
Patch
Post
Put
Trace
Tipo: | WebRequestMethod |
Valores aceitos: | Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch |
Cargo: | Named |
Valor padrão: | Default |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-OutFile
Salva o corpo da resposta no arquivo de saída especificado. Digite um caminho e nome de arquivo. Se você omitir o caminho, o padrão será o local atual.
Por padrão, Invoke-RestMethod
retorna os resultados para o pipeline.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-PassThru
Esse parâmetro é válido somente quando o parâmetro OutFile também é usado no comando. A intenção é ter os resultados gravados no arquivo e no pipeline.
Observação
Quando você usa o parâmetro PassThru , a saída é gravada no pipeline, mas o arquivo está vazio. Para obter mais informações, consulte Problema #15409 do PowerShell.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | No output |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Proxy
Usa um servidor proxy para a solicitação, em vez de se conectar diretamente ao recurso de Internet. Digite o URI de um servidor de proxy da rede.
Tipo: | Uri |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ProxyCredential
Especifica uma conta de usuário que tem permissão para usar o servidor proxy especificado pelo parâmetro Proxy . O padrão é o usuário atual.
Digite um nome de usuário, como "User01" ou "Domain01\User01", ou insira um objeto PSCredential , como um gerado pelo Get-Credential
cmdlet.
Esse parâmetro é válido somente quando o parâmetro Proxy também é usado no comando. Não é possível usar os parâmetros ProxyCredential e ProxyUseDefaultCredentials no mesmo comando.
Tipo: | PSCredential |
Cargo: | Named |
Valor padrão: | Current user |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ProxyUseDefaultCredentials
Usa as credenciais do usuário atual para acessar o servidor proxy especificado pelo parâmetro Proxy .
Esse parâmetro é válido somente quando o parâmetro Proxy também é usado no comando. Não é possível usar os parâmetros ProxyCredential e ProxyUseDefaultCredentials no mesmo comando.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-SessionVariable
Cria uma variável que contém a sessão de solicitação da Web. Insira um nome de variável sem o símbolo do cifrão ($
).
Quando você especifica uma variável de sessão, Invoke-RestMethod
cria um objeto de sessão de solicitação da Web e o atribui a uma variável com o nome especificado em sua sessão do PowerShell. Você pode usar a variável na sessão, assim que o comando for concluído.
Ao contrário de uma sessão remota, a sessão de solicitação da Web não é uma conexão persistente. É um objeto que contém informações sobre a conexão e a solicitação, incluindo cookies, credenciais, o valor máximo de redirecionamento e a cadeia de caracteres do agente do usuário. Você pode usá-lo para compartilhar o estado e os dados entre solicitações da Web.
Para usar a sessão de solicitação da Web em solicitações da Web subsequentes, especifique a variável de sessão no valor do parâmetro WebSession . O PowerShell usa os dados no objeto de sessão de solicitação da Web ao estabelecer a nova conexão. Para substituir um valor na sessão de solicitação da Web, use um parâmetro de cmdlet, como UserAgent ou Credential. Valores de parâmetro têm precedência sobre valores na seção de solicitação da Web.
Você não pode usar os parâmetros SessionVariable e WebSession no mesmo comando.
Tipo: | String |
Aliases: | SV |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-TimeoutSec
Especifica por quanto tempo a solicitação pode ficar pendente antes de atingir o tempo limite. Insira um valor em segundos. O valor padrão, 0, especifica um tempo limite indefinido.
Uma consulta DNS (Sistema de Nomes de Domínio) pode levar até 15 segundos para retornar ou atingir o tempo limite. Se sua solicitação contiver um nome de host que exija resolução e você definir TimeoutSec como um valor maior que zero, mas menor que 15 segundos, poderá levar 15 segundos ou mais antes que uma WebException seja lançada e sua solicitação atinja o tempo limite.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | 0 |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-TransferEncoding
Especifica um valor para o cabeçalho de resposta HTTP de codificação de transferência. Os valores aceitáveis para esse parâmetro são:
Chunked
Compress
Deflate
GZip
Identity
Tipo: | String |
Valores aceitos: | chunked, compress, deflate, gzip, identity |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Uri
Especifica o identificador de URI (Uniform Resource Identifier) do recurso da Internet para o qual a solicitação da Web é enviada. Esse parâmetro oferece suporte a valores HTTP, HTTPS, FTP e FILE.
Este parâmetro é obrigatório. O nome do parâmetro (Uri) é opcional.
Tipo: | Uri |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-UseBasicParsing
Indica que o cmdlet usa análise básica. O cmdlet retorna o HTML bruto em um objeto String .
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-UseDefaultCredentials
Usa as credenciais do usuário atual para enviar a solicitação da Web.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-UserAgent
Especifica uma cadeia de caracteres de agente do usuário para a solicitação da web.
O agente de usuário padrão é semelhante a "Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 "com pequenas variações para cada plataforma e sistema operacional.
Para testar um site com a cadeia de caracteres de agente de usuário padrão usada pela maioria dos navegadores da Internet, use as propriedades da classe PSUserAgent , como Chrome, FireFox, Internet Explorer, Opera e Safari.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-WebSession
Especifica uma sessão de solicitação da Web. Insira o nome da variável, incluindo o cifrão ($
).
Para substituir um valor na sessão de solicitação da Web, use um parâmetro de cmdlet, como UserAgent ou Credential. Valores de parâmetro têm precedência sobre valores na seção de solicitação da Web.
Diferente de uma sessão remota, a sessão de solicitação da Web não é uma conexão persistente. É um objeto que contém informações sobre a conexão e a solicitação, incluindo cookies, credenciais, o valor máximo de redirecionamento e a cadeia de caracteres de agente do usuário. Você pode usá-lo para compartilhar o estado e os dados entre solicitações da Web.
Para criar uma sessão de solicitação da Web, insira um nome de variável (sem um cifrão) no valor do parâmetro SessionVariable de um Invoke-RestMethod
comando. Invoke-RestMethod
cria a sessão e a salva na variável. Nos comandos subsequentes, use a variável como o valor do parâmetro WebSession .
Você não pode usar os parâmetros SessionVariable e WebSession no mesmo comando.
Tipo: | WebRequestSession |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
Você pode canalizar o corpo de uma solicitação da Web para esse cmdlet.
Saídas
Quando a solicitação retorna um número inteiro, esse cmdlet retorna esse número inteiro.
Quando a solicitação retorna uma cadeia de caracteres, esse cmdlet retorna essa cadeia de caracteres.
Quando a solicitação retorna XML válido, esse cmdlet a retorna como um XmlDocument.
PSObject
Quando a solicitação retorna cadeias de caracteres JSON, esse cmdlet retorna um PSObject que representa os dados.
Observações
O Windows PowerShell inclui os seguintes aliases para Invoke-RestMethod
:
irm