Invoke-WebRequest
Ruft Inhalte von einer Webseite im Internet ab.
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>]
Beschreibung
Das Invoke-WebRequest
Cmdlet sendet HTTP-, HTTPS-, FTP- und FILE-Anforderungen an eine Webseite oder einen Webdienst.
Das Cmdlet analysiert die Antwort und gibt Auflistungen von Formularen, Links, Bildern und anderen wichtigen HTML-Elementen zurück.
Dieses Cmdlet wurde in Windows PowerShell 3.0 eingeführt.
Hinweis
Standardmäßig kann Skriptcode auf der Webseite ausgeführt werden, wenn die Seite analysiert wird, um die ParsedHtml
Eigenschaft aufzufüllen.
Verwenden Sie den -UseBasicParsing
Schalter, um dies zu unterdrücken.
Beispiele
Beispiel 1: Senden einer Webanforderung
Dieser Befehl verwendet das Invoke-WebRequest
Cmdlet, um eine Webanforderung an die Bing.com Website zu senden.
$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
Der erste Befehl gibt die Anforderung aus und speichert die Antwort in der $R
Variablen.
Der zweite Befehl filtert die Objekte in der AllElements-Eigenschaft , wobei die name-Eigenschaft wie "* Value" und tagName "INPUT" lautet. Die gefilterten Ergebnisse werden an weitergeleitet, um Select-Object
die Eigenschaften Name und Wert auszuwählen.
Beispiel 2: Verwenden eines zustandsbehafteten Webdiensts
In diesem Beispiel wird gezeigt, wie Sie das Invoke-WebRequest
Cmdlet mit einem zustandsbehafteten Webdienst wie Facebook verwenden.
$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
Der erste Befehl verwendet das Invoke-WebRequest
Cmdlet, um eine Anmeldeanforderung zu senden. Der Befehl gibt den Wert "FB" für den Wert des Parameters SessionVariable an und speichert das Ergebnis in der $R
Variablen. Nach Abschluss des Befehls enthält die $R
Variable ein HtmlWebResponseObject und die $FB
Variable ein WebRequestSession-Objekt .
Nachdem sich das Invoke-WebRequest
Cmdlet bei facebook angemeldet hat, gibt die StatusDescription-Eigenschaft des Webantwortobjekts in der $R
Variablen an, dass der Benutzer erfolgreich angemeldet wurde.
Beispiel 3: Abrufen von Links von einer Webseite
Dieser Befehl ruft die Links auf einer Webseite ab.
(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href
Das Invoke-WebRequest
Cmdlet ruft den Inhalt der Webseite ab.
Anschließend wird die Links-Eigenschaft des zurückgegebenen HtmlWebResponseObject verwendet, um die Href-Eigenschaft jedes Links anzuzeigen.
Beispiel 4: Abfangen von Nicht erfolgreichen Nachrichten aus Invoke-WebRequest
Wenn Invoke-WebRequest
eine nicht erfolgreiche HTTP-Nachricht (404, 500 usw.) angezeigt wird, gibt sie keine Ausgabe zurück und löst einen Abbruchfehler aus. Um den Fehler abzufangen und den StatusCode anzuzeigen, können Sie die Ausführung in einen try/catch
Block einschließen. Im folgenden Beispiel wird gezeigt, wie dies erreicht wird.
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
Der erste Befehl ruft Invoke-WebRequest
mit einer ErrorAction von Stop auf, die erzwingt Invoke-WebRequest
, einen Abbruchfehler bei fehlerhaften Anforderungen auszulösen. Der Beendigungsfehler wird von dem Block abgefangen, der catch
den StatusCode aus dem Exception-Objekt abruft.
Parameter
-Body
Gibt den Anforderungstext an.
Der Text entspricht dem Inhalt der Anforderung, der auf die Header folgt.
Sie können auch einen Textwert an übergeben Invoke-WebRequest
.
Der Body-Parameter kann verwendet werden, um eine Liste von Abfrageparametern oder den Inhalt der Antwort anzugeben.
Wenn es sich bei der Eingabe um eine GET-Anforderung handelt und der Text ein IDictionary (in der Regel eine Hashtabelle) ist, wird der Text dem URI als Abfrageparameter hinzugefügt. Bei anderen GET-Anforderungen wird der Text als Wert des Anforderungstexts im Standardformat name=value
festgelegt.
Wenn der Textkörper ein Formular oder die Ausgabe eines Aufrufs Invoke-WebRequest
ist, legt PowerShell den Anforderungsinhalt auf die Formularfelder fest.
Zum Beispiel:
$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
- ODER
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
Gibt das Clientzertifikat an, das für eine sichere Webanforderung verwendet wird. Geben Sie eine Variable ein, die ein Zertifikat, einen Befehl oder einen Ausdruck enthält, durch die das Zertifikat abgerufen wird.
Um ein Zertifikat zu finden, verwenden Sie Get-PfxCertificate
das Get-ChildItem
Cmdlet auf dem Laufwerk Zertifikat (Cert:
) oder verwenden Sie es.
Wenn das Zertifikat ungültig ist oder keine qualifizierte Zertifizierungsstelle aufweist, verursacht der Befehl einen Fehler.
Type: | X509Certificate |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CertificateThumbprint
Gibt das digitale Zertifikat für öffentliche Schlüssel (X509) eines Benutzerkontos an, das über die Berechtigung zum Senden der Anforderung verfügt. Geben Sie den Zertifikatfingerabdruck des Zertifikats ein. Zertifikate werden in der clientzertifikatbasierten Authentifizierung verwendet. Sie können nur lokalen Benutzerkonten zugeordnet werden und funktionieren nicht mit Domänenkonten.
Verwenden Sie den Befehl oder Get-ChildItem
auf dem Get-Item
PowerShell-LaufwerkCert:
, um einen Zertifikatfingerabdruck abzurufen.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ContentType
Gibt den Inhaltstyp der Webanforderung an.
Wenn dieser Parameter nicht angegeben wird und die Anforderungsmethode POST ist, Invoke-WebRequest
legt den Inhaltstyp auf application/x-www-form-urlencoded fest. Andernfalls wird der Inhaltstyp nicht im Aufruf angegeben.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Gibt ein Benutzerkonto an, das über die Berechtigung zum Senden der Anforderung verfügt. Der Standardwert ist der aktuelle Benutzer.
Geben Sie einen Benutzernamen ein, z User01
. B. oder Domain01\User01
, oder geben Sie ein PSCredential-Objekt ein, z. B. ein vom Get-Credential
Cmdlet generiertes Objekt.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DisableKeepAlive
Gibt an, dass das Cmdlet den Wert KeepAlive im HTTP-Header auf False festlegt. KeepAlive ist standardmäßig True. KeepAlive richtet eine persistente Verbindung mit dem Server ein, um nachfolgende Anforderungen zu erleichtern.
Type: | SwitchParameter |
Position: | Named |
Default value: | KeepAlive |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Headers
Gibt die Header der Webanforderung an. Geben Sie eine Hashtabelle oder ein Wörterbuch ein.
Verwenden Sie zum Festlegen von UserAgent-Headern den Parameter UserAgent . Sie können diesen Parameter nicht verwenden, um UserAgent - oder Cookieheader anzugeben.
Type: | IDictionary |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InFile
Ruft den Inhalt der Webanforderung aus einer Datei ab.
Geben Sie einen Pfad- und Dateinamen ein. Wenn Sie den Pfad weglassen, wird der aktuelle Speicherort als Standard verwendet.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaximumRedirection
Gibt an, wie oft PowerShell eine Verbindung an einen alternativen URI (Uniform Resource Identifier) umleitet, bevor die Verbindung fehlschlägt. Der Standardwert ist 5. Der Wert 0 (null) unterbindet sämtliche Umleitungen.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Method
Gibt die für die Webanforderung verwendete Methode an. Zulässige Werte für diesen Parameter:
- Standard
- Löschen
- Herunterladen
- Head
- Zusammenführen
- Optionen
- Patch
- Posten
- Put
- Trace
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
Gibt die Ausgabedatei an, für die dieses Cmdlet den Antworttext speichert. Geben Sie einen Pfad- und Dateinamen ein. Wenn Sie den Pfad weglassen, wird der aktuelle Speicherort als Standard verwendet.
Gibt standardmäßig Invoke-WebRequest
die Ergebnisse an die Pipeline zurück.
Verwenden Sie den Passthru-Parameter, um Ergebnisse an eine Datei und an die Pipeline zu senden.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Gibt an, dass das Cmdlet die Ergebnisse nicht nur in eine Datei schreibt. Dieser Parameter ist nur gültig, wenn der OutFile-Parameter ebenfalls im Befehl verwendet wird.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Proxy
Gibt einen Proxyserver für die Anforderung an, anstatt eine direkte Verbindung mit der Internetressource herzustellen. Geben Sie den URI des Netzwerk-Proxyservers ein.
Type: | Uri |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyCredential
Gibt ein Benutzerkonto an, das über die Berechtigung zur Verwendung des Proxyservers verfügt, der durch den Proxy-Parameter angegeben wird. Der Standardwert ist der aktuelle Benutzer.
Geben Sie einen Benutzernamen ein, z User01
. B. oder Domain01\User01
, oder geben Sie ein PSCredential-Objekt ein, z. B. ein vom Get-Credential
Cmdlet generiertes Objekt.
Dieser Parameter ist nur gültig, wenn der Proxyparameter auch im Befehl verwendet wird. Der ProxyCredential-Parameter und der ProxyUseDefaultCredentials-Parameter können nicht im selben Befehl verwendet werden.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyUseDefaultCredentials
Gibt an, dass das Cmdlet die Anmeldeinformationen des aktuellen Benutzers verwendet, um auf den Proxyserver zuzugreifen, der durch den Proxyparameter angegeben wird.
Dieser Parameter ist nur gültig, wenn der Proxyparameter auch im Befehl verwendet wird. Der ProxyCredential-Parameter und der ProxyUseDefaultCredentials-Parameter können nicht im selben Befehl verwendet werden.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SessionVariable
Gibt eine Variable an, für die dieses Cmdlet eine Webanforderungssitzung erstellt und im Wert speichert.
Geben Sie einen Variablennamen ohne das Dollarzeichensymbol ($
) ein.
Wenn Sie eine Sitzungsvariable angeben, Invoke-WebRequest
erstellt ein Webanforderungssitzungsobjekt und weist es einer Variablen mit dem angegebenen Namen in Ihrer PowerShell-Sitzung zu. Sie können die Variable in der Sitzung verwenden, sobald der Befehl abgeschlossen wurde.
Im Gegensatz zu einer Remotesitzung besteht bei der Webanforderungssitzung keine persistente Verbindung. Es handelt sich um ein Objekt, das Informationen über die Verbindung und die Anforderung enthält, einschließlich Cookies, Anmeldeinformationen, dem Maximalwert für Umleitungen und der Zeichenfolge des Benutzer-Agents. Sie können das Objekt verwenden, um den Zustand und die Daten übergreifend für Webanforderungen zu nutzen.
Um die Webanforderungssitzung in nachfolgenden Webanforderungen zu verwenden, geben Sie die Sitzungsvariable im Wert des WebSession-Parameters an. PowerShell verwendet die Daten im Webanforderungssitzungsobjekt beim Herstellen der neuen Verbindung. Um einen Wert in der Webanforderungssitzung zu überschreiben, verwenden Sie einen Cmdletparameter wie UserAgent oder Credential. Parameterwerte haben Vorrang vor Werten in der Webanforderungssitzung.
Sie können die Parameter SessionVariable und WebSession nicht im gleichen Befehl verwenden.
Type: | String |
Aliases: | SV |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TimeoutSec
Gibt an, wie lange die Anforderung ausstehen kann, bevor ein Zeitlimit aufgetreten ist. Geben Sie einen Wert in Sekunden ein. Der Standardwert 0 (null) steht für einen unbegrenzten Zeitüberschreitungswert.
Eine DNS-Abfrage (Domain Name System) kann bis zu 15 Sekunden dauern, bis sie zurückgegeben oder ein Timeout ausgeführt wird. Wenn Ihre Anforderung einen Hostnamen enthält, der eine Auflösung erfordert, und Sie TimeoutSec auf einen Wert größer als 0 (null) festlegen, aber weniger als 15 Sekunden, kann es 15 Sekunden oder mehr dauern, bis eine WebException ausgelöst wird und ein Timeout für Ihre Anforderung auftritt.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TransferEncoding
Gibt einen Wert für den HTTP-Antwortheader transfer-encoding an. Zulässige Werte für diesen Parameter:
- Segmentiert
- Komprimieren
- Deflate
- GZip
- Identität
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
Gibt den URI (Uniform Resource Identifier) der Internetressource an, an die die Webanforderung gesendet wird. Geben Sie einen URI ein. Dieser Parameter unterstützt HTTP-, HTTPS-, FTP- und FILE-Werte.
Dieser Parameter ist erforderlich.
Type: | Uri |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseBasicParsing
Gibt an, dass das Cmdlet das Antwortobjekt für HTML-Inhalte ohne DOM-Analyse (Document Object Model) verwendet. Dieser Parameter ist erforderlich, wenn Internet Explorer nicht auf den Computern installiert ist, wie z. B. im Falle einer Server Core-Installation eines Windows Server-Betriebssystems.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseDefaultCredentials
Gibt an, dass der cmdet die Anmeldeinformationen des aktuellen Benutzers verwendet, um die Webanforderung zu senden.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UserAgent
Gibt eine Benutzer-Agent-Zeichenfolge für die Webanforderung an. Der Standardbenutzer-Agent ähnelt mit Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0
geringfügigen Variationen für jedes Betriebssystem und jede Plattform.
Verwenden Sie zum Testen einer Website mit der standardmäßigen Benutzer-Agent-Zeichenfolge, die von den meisten Internetbrowsern verwendet wird, die Eigenschaften der PSUserAgent-Klasse , z. B. Chrome, FireFox, InternetExplorer, Opera und Safari. Der folgende Befehl verwendet beispielsweise die Benutzer-Agent-Zeichenfolge für internet Explorer
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WebSession
Gibt eine Webanforderungssitzung an.
Geben Sie den Variablennamen ein, einschließlich des Dollarzeichens ($
).
Um einen Wert in der Webanforderungssitzung zu überschreiben, verwenden Sie einen Cmdletparameter wie UserAgent oder Credential. Parameterwerte haben Vorrang vor Werten in der Webanforderungssitzung.
Im Gegensatz zu einer Remotesitzung besteht bei der Webanforderungssitzung keine persistente Verbindung. Es handelt sich um ein Objekt, das Informationen über die Verbindung und die Anforderung enthält, einschließlich Cookies, Anmeldeinformationen, dem Maximalwert für Umleitungen und der Zeichenfolge des Benutzer-Agents. Sie können das Objekt verwenden, um den Zustand und die Daten übergreifend für Webanforderungen zu nutzen.
Um eine Webanforderungssitzung zu erstellen, geben Sie einen Variablennamen (ohne Dollarzeichen) in den Wert des SessionVariable-Parameters eines Befehls ein Invoke-WebRequest
. Invoke-WebRequest
erstellt die Sitzung und speichert sie in der Variablen. In allen nachfolgenden Befehlen verwenden Sie die Variable als Wert für den WebSession-Parameter.
Sie können die Parameter SessionVariable und WebSession nicht im gleichen Befehl verwenden.
Type: | WebRequestSession |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können den Text einer Webanforderung an übergeben Invoke-WebRequest
.