Invoke-WebRequest
Pobiera zawartość ze strony internetowej w Internecie.
Składnia
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>]
Opis
Polecenie Invoke-WebRequest
cmdlet wysyła żądania HTTP, HTTPS, FTP i FILE do strony internetowej lub usługi internetowej.
Analizuje odpowiedź i zwraca kolekcje formularzy, łączy, obrazów i innych znaczących elementów HTML.
To polecenie cmdlet zostało wprowadzone w Windows PowerShell 3.0.
Uwaga
Domyślnie kod skryptu na stronie internetowej może być uruchamiany, gdy strona jest analizowana w celu wypełnienia ParsedHtml
właściwości.
Użyj przełącznika, -UseBasicParsing
aby pominąć tę opcję.
Przykłady
Przykład 1. Wysyłanie żądania internetowego
To polecenie używa Invoke-WebRequest
polecenia cmdlet do wysyłania żądania internetowego do witryny Bing.com.
$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
Pierwsze polecenie wystawia żądanie i zapisuje odpowiedź w zmiennej $R
.
Drugie polecenie filtruje obiekty we właściwości AllElements , gdzie właściwość name jest podobna do "* Value", a tagName to "INPUT". Przefiltrowane wyniki są przesyłane potokiem, aby wybrać Select-Object
właściwości nazwy i wartości .
Przykład 2. Używanie stanowej usługi internetowej
W tym przykładzie pokazano, jak używać Invoke-WebRequest
polecenia cmdlet z stanową usługą internetową, taką jak 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
Pierwsze polecenie używa Invoke-WebRequest
polecenia cmdlet do wysyłania żądania logowania. Polecenie określa wartość "FB" dla wartości parametru SessionVariable i zapisuje wynik w zmiennej $R
. Po zakończeniu $R
wykonywania polecenia zmienna zawiera obiekt HtmlWebResponseObject , a zmienna $FB
zawiera obiekt WebRequestSession .
Po zalogowaniu Invoke-WebRequest
się polecenia cmdlet do serwisu facebook właściwość StatusDescription obiektu odpowiedzi internetowej w zmiennej $R
wskazuje, że użytkownik jest pomyślnie zalogowany.
Przykład 3. Pobieranie linków ze strony internetowej
To polecenie pobiera linki na stronie internetowej.
(Invoke-WebRequest -Uri "https://devblogs.microsoft.com/powershell/").Links.Href
Polecenie Invoke-WebRequest
cmdlet pobiera zawartość strony internetowej.
Następnie właściwość Links zwróconego obiektu HtmlWebResponseObject służy do wyświetlania właściwości Href każdego łącza.
Przykład 4. Przechwytywanie komunikatów o niepowodzeniu powodzenia z Invoke-WebRequest
W Invoke-WebRequest
przypadku napotkania komunikatu HTTP o niepowodzeniu powodzenia (404, 500 itp.), zwraca on brak danych wyjściowych i zgłasza błąd zakończenia. Aby przechwycić błąd i wyświetlić kod stanu , możesz ująć wykonywanie w try/catch
bloku. W poniższym przykładzie pokazano, jak to zrobić.
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
Pierwsze wywołanie Invoke-WebRequest
polecenia z komunikatem ErrorAction of Stop, co wymusza Invoke-WebRequest
zgłoszenie błędu zakończenia dla wszystkich żądań, które zakończyły się niepowodzeniem. Błąd zakończenia jest przechwytywane przez catch
blok, który pobiera kod stanu z obiektu Exception .
Parametry
-Body
Określa treść żądania.
Treść to zawartość żądania, która jest zgodna z nagłówkami.
Możesz również przekazać wartość treści do Invoke-WebRequest
.
Parametr Treść może służyć do określenia listy parametrów zapytania lub określenia zawartości odpowiedzi.
Gdy dane wejściowe to żądanie GET, a treść to IDictionary (zazwyczaj tabela skrótów), treść jest dodawana do identyfikatora URI jako parametrów zapytania. W przypadku innych żądań GET treść jest ustawiana jako wartość treści żądania w formacie standardowym name=value
.
Gdy treść jest formularzem lub jest to dane wyjściowe Invoke-WebRequest
wywołania, program PowerShell ustawia zawartość żądania na pola formularza.
Na przykład:
$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
- Lub-
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
Określa certyfikat klienta używany do bezpiecznego żądania internetowego. Wprowadź zmienną zawierającą certyfikat lub polecenie lub wyrażenie, które pobiera certyfikat.
Aby znaleźć certyfikat, użyj Get-PfxCertificate
lub użyj Get-ChildItem
polecenia cmdlet na dysku Certyfikat (Cert:
).
Jeśli certyfikat jest nieprawidłowy lub nie ma wystarczającego urzędu, polecenie kończy się niepowodzeniem.
Type: | X509Certificate |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CertificateThumbprint
Określa cyfrowy certyfikat klucza publicznego (X509) konta użytkownika z uprawnieniami do wysyłania żądania. Wprowadź odcisk palca certyfikatu certyfikatu. Certyfikaty są używane w uwierzytelnianiu opartym na certyfikatach klienta. Mogą być mapowane tylko na konta użytkowników lokalnych; nie działają z kontami domeny.
Aby uzyskać odcisk palca certyfikatu, użyj Get-Item
polecenia lub Get-ChildItem
na dysku programu PowerShell Cert:
.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ContentType
Określa typ zawartości żądania internetowego.
Jeśli ten parametr zostanie pominięty, a metoda żądania to POST, Invoke-WebRequest
ustawia typ zawartości na wartość application/x-www-form-urlencoded. W przeciwnym razie typ zawartości nie jest określony w wywołaniu.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Określa konto użytkownika, które ma uprawnienia do wysyłania żądania. Wartość domyślna to użytkownik bieżący.
Wpisz nazwę użytkownika, taką jak User01
lub Domain01\User01
, lub wprowadź obiekt PSCredential , taki jak jeden wygenerowany przez Get-Credential
polecenie cmdlet.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DisableKeepAlive
Wskazuje, że polecenie cmdlet ustawia wartość KeepAlive w nagłówku HTTP na False. Domyślnie keepAlive ma wartość True. KeepAlive ustanawia trwałe połączenie z serwerem w celu ułatwienia kolejnych żądań.
Type: | SwitchParameter |
Position: | Named |
Default value: | KeepAlive |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Headers
Określa nagłówki żądania internetowego. Wprowadź tabelę skrótu lub słownik.
Aby ustawić nagłówki UserAgent , użyj parametru UserAgent . Nie można użyć tego parametru do określenia nagłówków UserAgent lub cookie.
Type: | IDictionary |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InFile
Pobiera zawartość żądania internetowego z pliku.
Wprowadź ścieżkę i nazwę pliku. Jeśli pominięto ścieżkę, wartość domyślna to bieżąca lokalizacja.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaximumRedirection
Określa, ile razy program PowerShell przekierowuje połączenie z alternatywnym identyfikatorem URI (Uniform Resource Identifier) przed niepowodzeniem połączenia. Wartość domyślna to 5. Wartość 0 (zero) uniemożliwia wszystkie przekierowania.
Type: | Int32 |
Position: | Named |
Default value: | 5 |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Method
Określa metodę używaną dla żądania internetowego. Dopuszczalne wartości dla tego parametru to:
- Default
- Usuń
- Get
- Head
- Merge
- Opcje
- Patch
- Wpis
- Put
- Ślad
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
Określa plik wyjściowy, dla którego to polecenie cmdlet zapisuje treść odpowiedzi. Wprowadź ścieżkę i nazwę pliku. Jeśli pominięto ścieżkę, wartość domyślna to bieżąca lokalizacja.
Domyślnie Invoke-WebRequest
zwraca wyniki do potoku.
Aby wysłać wyniki do pliku i do potoku, użyj parametru Passthru .
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Wskazuje, że polecenie cmdlet zwraca wyniki oprócz zapisywania ich w pliku. Ten parametr jest prawidłowy tylko wtedy, gdy parametr OutFile jest również używany w poleceniu .
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Proxy
Określa serwer proxy dla żądania, zamiast łączyć się bezpośrednio z zasobem internetowym. Wprowadź identyfikator URI serwera proxy sieci.
Type: | Uri |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyCredential
Określa konto użytkownika, które ma uprawnienia do używania serwera proxy określonego przez parametr serwera proxy . Wartość domyślna to użytkownik bieżący.
Wpisz nazwę użytkownika, taką jak User01
lub Domain01\User01
, lub wprowadź obiekt PSCredential , taki jak jeden wygenerowany przez Get-Credential
polecenie cmdlet.
Ten parametr jest prawidłowy tylko wtedy, gdy parametr serwera proxy jest również używany w poleceniu. W tym samym poleceniu nie można użyć parametrów ProxyCredential i ProxyUseDefaultCredentials .
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ProxyUseDefaultCredentials
Wskazuje, że polecenie cmdlet używa poświadczeń bieżącego użytkownika do uzyskiwania dostępu do serwera proxy określonego przez parametr proxy .
Ten parametr jest prawidłowy tylko wtedy, gdy parametr serwera proxy jest również używany w poleceniu. W tym samym poleceniu nie można użyć parametrów ProxyCredential i ProxyUseDefaultCredentials .
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SessionVariable
Określa zmienną, dla której to polecenie cmdlet tworzy sesję żądania internetowego i zapisuje ją w wartości.
Wprowadź nazwę zmiennej bez symbolu znaku dolara ($
).
Po określeniu zmiennej Invoke-WebRequest
sesji program tworzy obiekt sesji żądania internetowego i przypisuje go do zmiennej o określonej nazwie w sesji programu PowerShell. Możesz użyć zmiennej w sesji zaraz po zakończeniu wykonywania polecenia.
W przeciwieństwie do sesji zdalnej sesja żądania sieci Web nie jest trwałym połączeniem. Jest to obiekt, który zawiera informacje o połączeniu i żądaniu, w tym pliki cookie, poświadczenia, maksymalną wartość przekierowania i parametry agenta użytkownika. Służy do udostępniania stanu i danych między żądaniami internetowymi.
Aby użyć sesji żądania internetowego w kolejnych żądaniach sieci Web, określ zmienną sesji w wartości parametru WebSession . Program PowerShell używa danych w obiekcie sesji żądania internetowego podczas nawiązywania nowego połączenia. Aby zastąpić wartość w sesji żądania internetowego, użyj parametru polecenia cmdlet, takiego jak UserAgent lub Credential. Wartości parametrów mają pierwszeństwo przed wartościami w sesji żądania internetowego.
W tym samym poleceniu nie można użyć parametrów SessionVariable i WebSession .
Type: | String |
Aliases: | SV |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TimeoutSec
Określa, jak długo żądanie może być oczekujące przed upływem limitu czasu. Wprowadź wartość w sekundach. Wartość domyślna 0 określa limit czasu nieokreślony.
Zwrócenie lub przekroczenie limitu czasu zapytania systemu nazw domen (DNS) może potrwać do 15 sekund. Jeśli żądanie zawiera nazwę hosta, która wymaga rozwiązania, a właściwość TimeoutSec zostanie ustawiona na wartość większą niż zero, ale krótsza niż 15 sekund, może upłynąć 15 sekund lub więcej, zanim zostanie zgłoszony wyjątek WebException i upłynął limit czasu żądania.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TransferEncoding
Określa wartość nagłówka odpowiedzi HTTP kodowania transferu. Dopuszczalne wartości dla tego parametru to:
- Fragmentaryczne
- Kompresji
- Deflate
- Gzip
- Tożsamość
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
Określa identyfikator URI (Uniform Resource Identifier) zasobu internetowego, do którego jest wysyłane żądanie internetowe. Wprowadź identyfikator URI. Ten parametr obsługuje wartości HTTP, HTTPS, FTP i FILE.
Ten parametr jest wymagany.
Type: | Uri |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseBasicParsing
Wskazuje, że polecenie cmdlet używa obiektu odpowiedzi dla zawartości HTML bez analizy modelu DOM (Document Object Model). Ten parametr jest wymagany, gdy program Internet Explorer nie jest zainstalowany na komputerach, na przykład w instalacji Server Core systemu operacyjnego Windows Server.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseDefaultCredentials
Wskazuje, że cmdet używa poświadczeń bieżącego użytkownika do wysłania żądania internetowego.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UserAgent
Określa ciąg agenta użytkownika dla żądania internetowego. Domyślny agent użytkownika jest podobny do Mozilla/5.0 (Windows NT; Windows NT 6.1; en-US) WindowsPowerShell/3.0
niewielkich zmian dla każdego systemu operacyjnego i platformy.
Aby przetestować witrynę internetową przy użyciu standardowego ciągu agenta użytkownika używanego przez większość przeglądarek internetowych, użyj właściwości klasy PSUserAgent , takich jak Chrome, FireFox, InternetExplorer, Opera i Safari. Na przykład następujące polecenie używa ciągu agenta użytkownika dla programu Internet Explorer
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WebSession
Określa sesję żądania internetowego.
Wprowadź nazwę zmiennej, w tym znak dolara ($
).
Aby zastąpić wartość w sesji żądania internetowego, użyj parametru polecenia cmdlet, takiego jak UserAgent lub Credential. Wartości parametrów mają pierwszeństwo przed wartościami w sesji żądania internetowego.
W przeciwieństwie do sesji zdalnej sesja żądania sieci Web nie jest trwałym połączeniem. Jest to obiekt, który zawiera informacje o połączeniu i żądaniu, w tym pliki cookie, poświadczenia, maksymalną wartość przekierowania i parametry agenta użytkownika. Służy do udostępniania stanu i danych między żądaniami internetowymi.
Aby utworzyć sesję żądania internetowego, wprowadź nazwę zmiennej (bez znaku dolara) w wartości parametru Invoke-WebRequest
SessionVariable polecenia. Invoke-WebRequest
tworzy sesję i zapisuje ją w zmiennej . W kolejnych poleceniach użyj zmiennej jako wartości parametru WebSession .
W tym samym poleceniu nie można użyć parametrów SessionVariable i WebSession .
Type: | WebRequestSession |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Dane wejściowe
Treść żądania internetowego można przekazać Invoke-WebRequest
do elementu .