Invoke-WebRequest
Hiermee haalt u inhoud op van een webpagina op 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
De Invoke-WebRequest
cmdlet verzendt HTTP-, HTTPS-, FTP- en FILE-aanvragen naar een webpagina of webservice.
Het antwoord wordt geparseerd en verzamelingen formulieren, koppelingen, afbeeldingen en andere belangrijke HTML-elementen geretourneerd.
Deze cmdlet is geïntroduceerd in Windows PowerShell 3.0.
Notitie
Standaard kan scriptcode op de webpagina worden uitgevoerd wanneer de pagina wordt geparseerd om de ParsedHtml
eigenschap te vullen.
Gebruik de -UseBasicParsing
schakeloptie om dit te onderdrukken.
Voorbeelden
Voorbeeld 1: een webaanvraag verzenden
Met deze opdracht wordt de Invoke-WebRequest
cmdlet gebruikt om een webaanvraag naar de Bing.com-site te verzenden.
$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
De eerste opdracht geeft de aanvraag uit en slaat het antwoord op in de $R
variabele.
Met de tweede opdracht worden de objecten in de eigenschap AllElements gefilterd, waarbij de eigenschap name '* Value' is en de tagName 'INPUT' is. De gefilterde resultaten worden doorgesluisd naar Select-Object
om de naam - en waarde-eigenschappen te selecteren.
Voorbeeld 2: Een stateful webservice gebruiken
In dit voorbeeld ziet u hoe u de Invoke-WebRequest
cmdlet gebruikt met een stateful webservice, zoals 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
De eerste opdracht gebruikt de Invoke-WebRequest
cmdlet om een aanmeldingsaanvraag te verzenden. De opdracht geeft een waarde van 'FB' op voor de waarde van de parameter SessionVariable en slaat het resultaat op in de $R
variabele. Wanneer de opdracht is voltooid, bevat de $R
variabele een HtmlWebResponseObject en de $FB
variabele een WebRequestSession-object .
Nadat de Invoke-WebRequest
cmdlet zich bij Facebook heeft aangemeld, geeft de eigenschap StatusDescription van het webreactieobject in de $R
variabele aan dat de gebruiker is aangemeld.
Voorbeeld 3: Koppelingen ophalen van een webpagina
Met deze opdracht worden de koppelingen op een webpagina opgeslagen.
(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href
De Invoke-WebRequest
cmdlet haalt de inhoud van de webpagina op.
Vervolgens wordt de eigenschap Koppelingen van het geretourneerde HtmlWebResponseObject gebruikt om de eigenschap Href van elke koppeling weer te geven.
Voorbeeld 4: berichten over niet-geslaagde berichten van Invoke-WebRequest
Wanneer Invoke-WebRequest
er een HTTP-bericht zonder succes (404, 500, enzovoort) wordt gevonden, wordt er geen uitvoer geretourneerd en wordt een afsluitfout gegenereerd. Als u de fout wilt ondervangen en de StatusCode wilt weergeven, kunt u de uitvoering insluiten in een try/catch
blok. In het volgende voorbeeld ziet u hoe u dit doet.
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
De eerste opdracht roept Invoke-WebRequest
aan met een ErrorAction van Stop, waardoor Invoke-WebRequest
een afsluitfout wordt gegenereerd bij mislukte aanvragen. De afsluitfout wordt ondervangen door het catch
blok dat de StatusCode ophaalt uit het uitzonderingsobject .
Parameters
-Body
Hiermee geeft u de hoofdtekst van de aanvraag op.
De hoofdtekst is de inhoud van de aanvraag die volgt op de headers.
U kunt ook een body-waarde doorsnijden naar Invoke-WebRequest
.
De parameter Body kan worden gebruikt om een lijst met queryparameters op te geven of de inhoud van het antwoord op te geven.
Wanneer de invoer een GET-aanvraag is en de hoofdtekst een IDictionary is (meestal een hash-tabel), wordt de hoofdtekst als queryparameters toegevoegd aan de URI. Voor andere GET-aanvragen wordt de hoofdtekst ingesteld als de waarde van de aanvraagbody in de standaardindeling name=value
.
Wanneer de hoofdtekst een formulier is of de uitvoer van een Invoke-WebRequest
aanroep is, stelt PowerShell de aanvraaginhoud in op de formuliervelden.
Bijvoorbeeld:
$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
- Of-
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
Hiermee geeft u het clientcertificaat op dat wordt gebruikt voor een beveiligde webaanvraag. Voer een variabele in die een certificaat of een opdracht of expressie bevat waarmee het certificaat wordt ophaalt.
Als u een certificaat wilt zoeken, gebruikt Get-PfxCertificate
u de Get-ChildItem
cmdlet in het certificaatstation (Cert:
).
Als het certificaat niet geldig is of onvoldoende autoriteit heeft, mislukt de opdracht.
Type: | X509Certificate |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CertificateThumbprint
Hiermee geeft u het digitale openbare sleutelcertificaat (X509) op van een gebruikersaccount dat gemachtigd is om de aanvraag te verzenden. Voer de vingerafdruk van het certificaat in. Certificaten worden gebruikt in verificatie op basis van clientcertificaten. Ze kunnen alleen worden toegewezen aan lokale gebruikersaccounts; ze werken niet met domeinaccounts.
Als u een vingerafdruk van een certificaat wilt ophalen, gebruikt u de Get-Item
opdracht of Get-ChildItem
in het PowerShell-station Cert:
.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ContentType
Hiermee geeft u het inhoudstype van de webaanvraag op.
Als deze parameter wordt weggelaten en de aanvraagmethode POST is, Invoke-WebRequest
stelt u het inhoudstype in op application/x-www-form-urlencoded. Anders wordt het inhoudstype niet opgegeven in de aanroep.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Hiermee geeft u een gebruikersaccount op dat gemachtigd is om de aanvraag te verzenden. Standaard is dit de huidige gebruiker.
Typ een gebruikersnaam, zoals User01
of Domain01\User01
, of voer een PSCredential-object in, zoals een object dat wordt gegenereerd door de Get-Credential
cmdlet.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DisableKeepAlive
Geeft aan dat de cmdlet de waarde KeepAlive in de HTTP-header instelt op False. KeepAlive is standaard Waar. KeepAlive brengt een permanente verbinding met de server tot stand om volgende aanvragen te vergemakkelijken.
Type: | SwitchParameter |
Position: | Named |
Default value: | KeepAlive |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Headers
Hiermee geeft u de headers van de webaanvraag. Voer een hash-tabel of woordenlijst in.
Als u UserAgent-headers wilt instellen, gebruikt u de parameter UserAgent . U kunt deze parameter niet gebruiken om UserAgent - of cookieheaders op te geven.
Type: | IDictionary |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InFile
Haalt de inhoud van de webaanvraag op uit een bestand.
Voer een pad en bestandsnaam in. Als u het pad weglaat, is de standaardwaarde de huidige locatie.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaximumRedirection
Hiermee geeft u op hoe vaak PowerShell een verbinding omleidt naar een alternatieve URI (Uniform Resource Identifier) voordat de verbinding mislukt. De standaardwaarde is 5. Een waarde van 0 (nul) voorkomt alle omleiding.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Method
Hiermee geeft u de methode die wordt gebruikt voor de webaanvraag. De aanvaardbare waarden voor deze parameter zijn:
- Standaard
- Verwijderen
- Ophalen
- Head
- Samenvoegen
- Opties
- Patch
- Plaatsen
- Put
- Tracering
Type: | WebRequestMethod |
Accepted values: | Default, Get, Head, Post, Put, Delete, Trace, Options, Merge, Patch |
Position: | Named |
Default value: | Default |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-OutFile
Hiermee geeft u het uitvoerbestand op waarvoor deze cmdlet de hoofdtekst van het antwoord opslaat. Voer een pad en bestandsnaam in. Als u het pad weglaat, is de standaardwaarde de huidige locatie.
Retourneert standaard Invoke-WebRequest
de resultaten naar de pijplijn.
Als u de resultaten naar een bestand en naar de pijplijn wilt verzenden, gebruikt u de parameter Passthru .
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Geeft aan dat de cmdlet de resultaten retourneert, naast het schrijven ervan naar een bestand. Deze parameter is alleen geldig wanneer de parameter OutFile ook wordt gebruikt in de opdracht.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Proxy
Hiermee geeft u een proxyserver voor de aanvraag, in plaats van rechtstreeks verbinding te maken met de internetbron. Voer de URI van een netwerkproxyserver in.
Type: | Uri |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyCredential
Hiermee geeft u een gebruikersaccount op dat is gemachtigd voor het gebruik van de proxyserver die is opgegeven door de proxyparameter . Standaard is dit de huidige gebruiker.
Typ een gebruikersnaam, zoals User01
of Domain01\User01
, of voer een PSCredential-object in, zoals een object dat wordt gegenereerd door de Get-Credential
cmdlet.
Deze parameter is alleen geldig wanneer de proxyparameter ook wordt gebruikt in de opdracht. U kunt de parameters ProxyCredential en ProxyUseDefaultCredentials niet gebruiken in dezelfde opdracht.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyUseDefaultCredentials
Geeft aan dat de cmdlet de referenties van de huidige gebruiker gebruikt voor toegang tot de proxyserver die is opgegeven door de proxyparameter .
Deze parameter is alleen geldig wanneer de proxyparameter ook wordt gebruikt in de opdracht. U kunt de parameters ProxyCredential en ProxyUseDefaultCredentials niet gebruiken in dezelfde opdracht.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SessionVariable
Hiermee geeft u een variabele waarvoor deze cmdlet een webaanvraagsessie maakt en slaat deze op in de waarde.
Voer een variabelenaam in zonder het dollarteken ($
).
Wanneer u een sessievariabele opgeeft, Invoke-WebRequest
maakt u een webaanvraagsessieobject en wijst u dit toe aan een variabele met de opgegeven naam in uw PowerShell-sessie. U kunt de variabele in uw sessie gebruiken zodra de opdracht is voltooid.
In tegenstelling tot een externe sessie is de webaanvraagsessie geen permanente verbinding. Het is een object dat informatie bevat over de verbinding en de aanvraag, waaronder cookies, referenties, de maximale omleidingswaarde en de tekenreeks van de gebruikersagent. U kunt deze gebruiken om de status en gegevens te delen tussen webaanvragen.
Als u de webaanvraagsessie wilt gebruiken in volgende webaanvragen, geeft u de sessievariabele op in de waarde van de parameter WebSession . PowerShell gebruikt de gegevens in het sessieobject van de webaanvraag bij het tot stand brengen van de nieuwe verbinding. Als u een waarde in de webaanvraagsessie wilt overschrijven, gebruikt u een cmdlet-parameter, zoals UserAgent of Credential. Parameterwaarden hebben voorrang op waarden in de webaanvraagsessie.
U kunt de parameters SessionVariable en WebSession niet in dezelfde opdracht gebruiken.
Type: | String |
Aliases: | SV |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TimeoutSec
Hiermee geeft u op hoe lang de aanvraag in behandeling kan zijn voordat er een time-out optreedt. Voer een waarde in seconden in. De standaardwaarde, 0, geeft een time-out voor onbepaalde tijd op.
Het kan tot 15 seconden duren voordat een DNS-query (Domain Name System) wordt geretourneerd of een time-out optreedt. Als uw aanvraag een hostnaam bevat waarvoor omzetting is vereist en u TimeoutSec instelt op een waarde die groter is dan nul, maar minder dan 15 seconden, kan het 15 seconden of langer duren voordat een WebException wordt gegenereerd en er een time-out optreedt voor uw aanvraag.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TransferEncoding
Hiermee geeft u een waarde op voor de http-antwoordheader voor overdrachtcodering. De aanvaardbare waarden voor deze parameter zijn:
- Gesegmenteerd
- Comprimeren
- Deflate
- Gzip
- Identiteit
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
Hiermee geeft u de URI (Uniform Resource Identifier) van de internetbron waarnaar de webaanvraag wordt verzonden. Voer een URI in. Deze parameter ondersteunt HTTP-, HTTPS-, FTP- en FILE-waarden.
Deze parameter is vereist.
Type: | Uri |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseBasicParsing
Geeft aan dat de cmdlet het antwoordobject gebruikt voor HTML-inhoud zonder DOM-parsering (Document Object Model). Deze parameter is vereist wanneer Internet Explorer niet is geïnstalleerd op de computers, zoals op een Server Core-installatie van een Windows Server-besturingssysteem.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseDefaultCredentials
Geeft aan dat de cmdet de referenties van de huidige gebruiker gebruikt om de webaanvraag te verzenden.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UserAgent
Hiermee geeft u een tekenreeks voor de gebruikersagent op voor de webaanvraag. De standaardgebruikersagent is vergelijkbaar met Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0
met kleine variaties voor elk besturingssysteem en platform.
Als u een website wilt testen met de standaardtekenreeks voor de gebruikersagent die door de meeste internetbrowsers wordt gebruikt, gebruikt u de eigenschappen van de klasse PSUserAgent , zoals Chrome, FireFox, InternetExplorer, Opera en Safari. De volgende opdracht maakt bijvoorbeeld gebruik van de tekenreeks van de gebruikersagent voor Internet Explorer
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WebSession
Hiermee geeft u een webaanvraagsessie op.
Voer de naam van de variabele in, inclusief het dollarteken ($
).
Als u een waarde in de webaanvraagsessie wilt overschrijven, gebruikt u een cmdlet-parameter, zoals UserAgent of Credential. Parameterwaarden hebben voorrang op waarden in de webaanvraagsessie.
In tegenstelling tot een externe sessie is de webaanvraagsessie geen permanente verbinding. Het is een object dat informatie bevat over de verbinding en de aanvraag, waaronder cookies, referenties, de maximale omleidingswaarde en de tekenreeks van de gebruikersagent. U kunt deze gebruiken om de status en gegevens te delen tussen webaanvragen.
Als u een webaanvraagsessie wilt maken, voert u een variabelenaam (zonder dollarteken) in de waarde van de parameter SessionVariable van een Invoke-WebRequest
opdracht in. Invoke-WebRequest
maakt de sessie en slaat deze op in de variabele. Gebruik in volgende opdrachten de variabele als de waarde van de parameter WebSession .
U kunt de parameters SessionVariable en WebSession niet in dezelfde opdracht gebruiken.
Type: | WebRequestSession |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
U kunt de hoofdtekst van een webaanvraag doorsnijden naar Invoke-WebRequest
.