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.
Kommentar
Som standard kan skriptkod på webbsidan köras när sidan parsas för att fylla i ParsedHtml
egenskapen. Använd växeln -UseBasicParsing
för att förhindra detta.
Viktigt!
Exemplen i den här artikeln refererar till värdar i domänen contoso.com
. Det här är en fiktiv domän som används av Microsoft till exempel. Exemplen är utformade för att visa hur du använder cmdletarna.
Men eftersom webbplatserna contoso.com
inte finns fungerar exemplen inte. Anpassa exemplen till värdar i din miljö.
Exempel
Exempel 1: Skicka en webbbegäran
I det här exemplet används cmdleten Invoke-WebRequest
för att skicka en webbbegäran till Bing.com webbplats.
$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
Data som returneras av Invoke-WebRequest
lagras i variabeln $Response
. Egenskapen InputFields för svaret innehåller formulärfälten. Where-Object
används för att filtrera formulärfälten till dem där namnegenskapen liknar "* Värde". De filtrerade resultaten skickas till för att Select-Object
välja egenskaper för namn och värde .
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
ett HtmlWebResponseObject och variabeln $FB
innehåller ett WebRequestSession-objekt .
När cmdleten Invoke-WebRequest
har loggat in på facebook anger egenskapen StatusDescription för webbsvarsobjektet i variabeln $R
att användaren är inloggad.
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 Href-egenskapen för varje länk.
Exempel 4: Fånga meddelanden som inte lyckades från Invoke-WebRequest
När Invoke-WebRequest
ett HTTP-meddelande inte lyckas (404, 500 osv.) returneras inga utdata och ett avslutande fel genereras. Om du vill fånga felet och visa StatusCode kan du omsluta körningen i ett try/catch
block.
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
Det avslutande felet fångas av catch
blocket, som hämtar StatusCode från undantagsobjektet.
Exempel 8: Ladda ned flera filer samtidigt
Cmdleten Invoke-WebRequest
kan bara ladda ned en fil i taget. I följande exempel används Start-ThreadJob
för att skapa flera trådjobb för att ladda ned flera filer samtidigt.
$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
}
Kommentar
Om du vill använda cmdleten Start-ThreadJob
måste du installera ThreadJob-modulen från PowerShell-galleriet.
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
.
Brödtextparametern 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 hash-tabell) läggs brödtexten till i URI:n som frågeparametrar. För andra typer av begäranden (till exempel POST) 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 Get-PfxCertificate
eller använder du cmdleten Get-ChildItem
på certifikatenheten (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. Certifikat kan bara mappas till lokala användarkonton, inte domänkonton.
Om du vill se certifikatets tumavtryck använder du Get-Item
kommandot eller Get-ChildItem
för att hitta certifikatet i Cert:\CurrentUser\My
.
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
du 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. Standard är den aktuella användaren.
Ange ett användarnamn, till exempel User01 eller Domain01\User01, eller ange ett PSCredential-objekt som genereras av cmdleten Get-Credential
.
Autentiseringsuppgifter lagras i ett PSCredential-objekt och lösenordet lagras som en SecureString.
Kommentar
Mer information om SecureString-dataskydd finns i Hur säker är SecureString?.
Typ: | PSCredential |
Position: | Named |
Standardvärde: | None |
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 KeepAlive Sant. KeepAlive upprättar en beständig anslutning till servern för att underlätta efterföljande begäranden.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
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: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Method
Anger den metod som används för webbbegäran. De acceptabla värdena för den här parametern är:
Default
Delete
Get
Head
Merge
Options
Patch
Post
Put
Trace
Typ: | WebRequestMethod |
Godkända värden: | Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch |
Position: | Named |
Standardvärde: | None |
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 Invoke-WebRequest
returnerar 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 .
Kommentar
När du använder parametern PassThru skrivs utdata till pipelinen men filen är tom. Mer information finns i PowerShell-problem #15409.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
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 proxyparametern. Standard ä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 cmdleten Get-Credential
.
Den här parametern är endast giltig när proxyparametern också används i kommandot . Du kan inte använda parametrarna ProxyCredential och ProxyUseDefaultCredentials i samma kommando.
Typ: | PSCredential |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-ProxyUseDefaultCredentials
Anger att cmdleten använder autentiseringsuppgifterna för den aktuella användaren för att komma åt proxyservern som anges av proxyparametern .
Den här parametern är endast giltig när proxyparametern 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 Invoke-WebRequest
skapar du 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 acceptabla värdena för den här parametern är:
Chunked
Compress
Deflate
GZip
Identity
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. Parameternamnet Uri är valfritt.
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: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-UseDefaultCredentials
Anger att cmdleten använder den aktuella användarens autentiseringsuppgifter för att skicka webbbegäran.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
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 klassen PSUserAgent , till exempel Chrome, FireFox, InternetExplorer, Opera och Safari. Följande kommando använder till exempel användaragentsträngen för Internet Explorer: Invoke-WebRequest -Uri https://website.com/ -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)
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
Du kan skicka brödtexten för en webbbegäran till den här cmdleten.
Utdata
Den här cmdleten returnerar svarsobjektet som representerar resultatet av webbbegäran.
Kommentarer
Windows PowerShell innehåller följande alias för Invoke-WebRequest
:
iwr