Dela via


Invoke-WebRequest

Hämtar innehåll från en webbsida på 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

Cmdleten Invoke-WebRequest skickar HTTP-, HTTPS-, FTP- och FILE-begäranden till en webbsida eller webbtjänst. Den parsar svaret och returnerar samlingar av formulär, länkar, bilder och andra viktiga HTML-element.

Den här cmdleten introducerades i Windows PowerShell 3.0.

Not

Som standard kan skriptkod på webbsidan köras när sidan parsas för att fylla i egenskapen ParsedHtml. Använd växeln -UseBasicParsing för att förhindra detta.

Exempel

Exempel 1: Skicka en webbbegäran

Det här kommandot använder cmdleten Invoke-WebRequest för att skicka en webbbegäran till Bing.com webbplats.

$R = Invoke-WebRequest -URI https://www.bing.com?q=how+many+feet+in+a+mile
$R.AllElements | Where-Object {
    $_.name -like "* Value" -and $_.tagName -eq "INPUT"
} | Select-Object Name, Value

name       value
----       -----
From Value 1
To Value   5280

Det första kommandot utfärdar begäran och sparar svaret i variabeln $R.

Det andra kommandot filtrerar objekten i egenskapen AllElements där egenskapen namn är som "* Värde" och tagName är "INPUT". De filtrerade resultaten skickas till Select-Object för att välja namn och värde egenskaper.

Exempel 2: Använd en tillståndskänslig webbtjänst

Det här exemplet visar hur du använder cmdleten Invoke-WebRequest med en tillståndskänslig webbtjänst, till exempel 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

Det första kommandot använder cmdleten Invoke-WebRequest för att skicka en inloggningsbegäran. Kommandot anger värdet "FB" för värdet för parametern SessionVariable och sparar resultatet i variabeln $R. När kommandot har slutförts innehåller variabeln $R en HtmlWebResponseObject- och variabeln $FB innehåller ett WebRequestSession--objekt.

När Invoke-WebRequest-cmdleten har loggat in på facebook anger egenskapen StatusDescription för webbsvarsobjektet i variabeln $R att användaren har loggat in.

Exempel 3: Hämta länkar från en webbsida

Det här kommandot hämtar länkarna på en webbsida.

(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href

Cmdleten Invoke-WebRequest hämtar innehållet på webbsidan. Sedan används egenskapen Länkar för den returnerade HtmlWebResponseObject- för att visa egenskapen Href för varje länk.

Exempel 4: Fånga meddelanden som inte lyckades från Invoke-WebRequest

När Invoke-WebRequest stöter på ett HTTP-meddelande som inte lyckas (404, 500 osv.) returnerar det inga utdata och utlöser ett avslutande fel. Om du vill fånga felet och visa StatusCode kan du omsluta körningen i ett try/catch-block. I följande exempel visas hur du gör detta.

try
{
    $response = Invoke-WebRequest -Uri "www.microsoft.com/unkownhost" -ErrorAction Stop
    # This will only execute if the Invoke-WebRequest is successful.
    $StatusCode = $Response.StatusCode
}
catch
{
    $StatusCode = $_.Exception.Response.StatusCode.value__
}
$StatusCode

404

Det första kommandot anropar Invoke-WebRequest med en ErrorAction- av Stop, som tvingar Invoke-WebRequest att utlösa ett avslutande fel på misslyckade begäranden. Det avslutande felet fångas av catch-blocket som hämtar StatusCode- från objektet Exception.

Parametrar

-Body

Anger brödtexten i begäran. Brödtexten är innehållet i begäran som följer rubrikerna. Du kan också skicka ett brödtextvärde till Invoke-WebRequest.

Parametern Body kan användas för att ange en lista med frågeparametrar eller ange innehållet i svaret.

När indata är en GET-begäran och brödtexten är en IDictionary- (vanligtvis en hashtabell) läggs brödtexten till i URI:n som frågeparametrar. För andra GET-begäranden anges brödtexten som värdet för begärandetexten i standardformatet name=value.

När brödtexten är ett formulär, eller om det är utdata från ett Invoke-WebRequest-anrop, anger PowerShell begärandeinnehållet till formulärfälten. Till exempel:

$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

  • eller-

Invoke-RestMethod https://website.com/service.aspx -Body $r.Forms\[0\]

Typ:Object
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:True
Godkänn jokertecken:False

-Certificate

Anger det klientcertifikat som används för en säker webbbegäran. Ange en variabel som innehåller ett certifikat eller ett kommando eller uttryck som hämtar certifikatet.

Om du vill hitta ett certifikat använder du Get-PfxCertificate eller använder cmdleten Get-ChildItem på enheten Certificate (Cert:). Om certifikatet inte är giltigt eller inte har tillräcklig behörighet misslyckas kommandot.

Typ:X509Certificate
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-CertificateThumbprint

Anger det digitala offentliga nyckelcertifikatet (X509) för ett användarkonto som har behörighet att skicka begäran. Ange certifikatets tumavtryck. Certifikat används i klientcertifikatbaserad autentisering. De kan endast mappas till lokala användarkonton. de fungerar inte med domänkonton.

Om du vill hämta ett tumavtryck för certifikat använder du kommandot Get-Item eller Get-ChildItem i PowerShell Cert:-enheten.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ContentType

Anger innehållstypen för webbbegäran.

Om den här parametern utelämnas och begärandemetoden är POST anger Invoke-WebRequest innehållstypen till application/x-www-form-urlencoded. Annars anges inte innehållstypen i anropet.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Credential

Anger ett användarkonto som har behörighet att skicka begäran. Standardvärdet är den aktuella användaren.

Ange ett användarnamn, till exempel User01 eller Domain01\User01, eller ange ett PSCredential- objekt, till exempel ett som genereras av Get-Credential cmdlet.

Typ:PSCredential
Position:Named
Standardvärde:Current user
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-DisableKeepAlive

Anger att cmdleten anger värdet KeepAlive i HTTP-huvudet till False. Som standard är KeepAliveTrue. KeepAlive upprättar en beständig anslutning till servern för att underlätta efterföljande begäranden.

Typ:SwitchParameter
Position:Named
Standardvärde:KeepAlive
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Headers

Anger sidhuvudena för webbbegäran. Ange en hash-tabell eller ordlista.

Om du vill ange UserAgent--huvuden använder du parametern UserAgent. Du kan inte använda den här parametern för att ange UserAgent-- eller cookierubriker.

Typ:IDictionary
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-InFile

Hämtar innehållet i webbbegäran från en fil.

Ange en sökväg och ett filnamn. Om du utelämnar sökvägen är standardinställningen den aktuella platsen.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-MaximumRedirection

Anger hur många gånger PowerShell omdirigerar en anslutning till en alternativ URI (Uniform Resource Identifier) innan anslutningen misslyckas. Standardvärdet är 5. Värdet 0 (noll) förhindrar all omdirigering.

Typ:Int32
Position:Named
Standardvärde:5
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Method

Anger den metod som används för webbbegäran. De godtagbara värdena för den här parametern är:

  • Standard
  • Ta bort
  • Huvud
  • Slå ihop
  • Alternativ
  • Lapp
  • Post
  • Ställa
  • Spåra
Typ:WebRequestMethod
Godkända värden:Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch
Position:Named
Standardvärde:Default
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-OutFile

Anger den utdatafil som den här cmdleten sparar svarstexten för. Ange en sökväg och ett filnamn. Om du utelämnar sökvägen är standardinställningen den aktuella platsen.

Som standard returnerar Invoke-WebRequest resultatet till pipelinen. Om du vill skicka resultatet till en fil och till pipelinen använder du parametern Passthru.

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-PassThru

Anger att cmdleten returnerar resultatet, förutom att skriva dem till en fil. Den här parametern är endast giltig när parametern OutFile också används i kommandot .

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Proxy

Anger en proxyserver för begäran i stället för att ansluta direkt till Internetresursen. Ange URI för en nätverksproxyserver.

Typ:Uri
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ProxyCredential

Anger ett användarkonto som har behörighet att använda proxyservern som anges av parametern Proxy. Standardvärdet är den aktuella användaren.

Ange ett användarnamn, till exempel User01 eller Domain01\User01, eller ange ett PSCredential- objekt, till exempel ett som genereras av Get-Credential cmdlet.

Den här parametern är endast giltig när parametern Proxy också används i kommandot . Du kan inte använda parametrarna ProxyCredential och ProxyUseDefaultCredentials i samma kommando.

Typ:PSCredential
Position:Named
Standardvärde:Current user
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-ProxyUseDefaultCredentials

Anger att cmdleten använder den aktuella användarens autentiseringsuppgifter för att komma åt proxyservern som anges av parametern Proxy.

Den här parametern är endast giltig när parametern Proxy också används i kommandot . Du kan inte använda parametrarna ProxyCredential och ProxyUseDefaultCredentials i samma kommando.

Typ:SwitchParameter
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-SessionVariable

Anger en variabel för vilken den här cmdleten skapar en webbbegärandesession och sparar den i värdet. Ange ett variabelnamn utan symbolen dollartecken ($).

När du anger en sessionsvariabel skapar Invoke-WebRequest ett sessionsobjekt för webbbegäran och tilldelar det till en variabel med det angivna namnet i PowerShell-sessionen. Du kan använda variabeln i sessionen så snart kommandot har slutförts.

Till skillnad från en fjärrsession är webbbegärandesessionen inte en beständig anslutning. Det är ett objekt som innehåller information om anslutningen och begäran, inklusive cookies, autentiseringsuppgifter, maximalt omdirigeringsvärde och användaragentsträngen. Du kan använda den för att dela tillstånd och data mellan webbbegäranden.

Om du vill använda webbbegärandesessionen i efterföljande webbbegäranden anger du sessionsvariabeln i värdet för parametern WebSession. PowerShell använder data i sessionsobjektet för webbbegäran när den nya anslutningen upprättas. Om du vill åsidosätta ett värde i webbbegäranssessionen använder du en cmdlet-parameter, till exempel UserAgent eller Credential. Parametervärden har företräde framför värden i webbbegärandesessionen.

Du kan inte använda parametrarna SessionVariable och WebSession i samma kommando.

Typ:String
Alias:SV
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-TimeoutSec

Anger hur länge begäran kan vänta innan tidsgränsen uppnås. Ange ett värde i sekunder. Standardvärdet 0 anger en tidsgräns på obestämd tid.

En DNS-fråga (Domain Name System) kan ta upp till 15 sekunder att returnera eller överskrida tidsgränsen. Om din begäran innehåller ett värdnamn som kräver lösning och du anger TimeoutSec till ett värde som är större än noll, men mindre än 15 sekunder, kan det ta 15 sekunder eller mer innan en WebException- utlöses och din begäran överskrider tidsgränsen.

Typ:Int32
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-TransferEncoding

Anger ett värde för http-svarshuvudet för överföringskodning. De godtagbara värdena för den här parametern är:

  • Chunked
  • Komprimera
  • Tömma
  • GZip
  • Identitet
Typ:String
Godkända värden:chunked, compress, deflate, gzip, identity
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Uri

Anger URI (Uniform Resource Identifier) för den Internetresurs som webbbegäran skickas till. Ange en URI. Den här parametern stöder HTTP-, HTTPS-, FTP- och FILE-värden.

Den här parametern krävs.

Typ:Uri
Position:0
Standardvärde:None
Obligatorisk:True
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-UseBasicParsing

Anger att cmdleten använder svarsobjektet för HTML-innehåll utan dom-parsning (Document Object Model). Den här parametern krävs när Internet Explorer inte är installerat på datorerna, till exempel på en Server Core-installation av ett Windows Server-operativsystem.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-UseDefaultCredentials

Anger att cmdet använder den aktuella användarens autentiseringsuppgifter för att skicka webbbegäran.

Typ:SwitchParameter
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-UserAgent

Anger en användaragentsträng för webbbegäran. Standardanvändaragenten liknar Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0 med små variationer för varje operativsystem och plattform.

Om du vill testa en webbplats med standardanvändaragentsträngen som används av de flesta webbläsare använder du egenskaperna för PSUserAgent-klass, till exempel Chrome, FireFox, InternetExplorer, Opera och Safari. Följande kommando använder till exempel användaragentsträngen för Internet Explorer

Typ:String
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-WebSession

Anger en webbförfrågningssession. Ange variabelnamnet, inklusive dollartecknet ($).

Om du vill åsidosätta ett värde i webbbegäranssessionen använder du en cmdlet-parameter, till exempel UserAgent eller Credential. Parametervärden har företräde framför värden i webbbegärandesessionen.

Till skillnad från en fjärrsession är webbbegärandesessionen inte en beständig anslutning. Det är ett objekt som innehåller information om anslutningen och begäran, inklusive cookies, autentiseringsuppgifter, maximalt omdirigeringsvärde och användaragentsträngen. Du kan använda den för att dela tillstånd och data mellan webbbegäranden.

Om du vill skapa en webbförfrågningssession anger du ett variabelnamn (utan dollartecken) i värdet för parametern SessionVariable för ett Invoke-WebRequest kommando. Invoke-WebRequest skapar sessionen och sparar den i variabeln. I efterföljande kommandon använder du variabeln som värdet för parametern WebSession.

Du kan inte använda parametrarna SessionVariable och WebSession i samma kommando.

Typ:WebRequestSession
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

Object

Du kan skicka brödtexten i en webbbegäran till Invoke-WebRequest.

Utdata

HtmlWebResponseObject