Invoke-WebRequest to wbudowany w PowerShell cmdlet do wysyłania żądań HTTP i HTTPS. Pobierzesz nim stronę WWW, ściągniesz plik, wywołasz REST API albo wyślesz dane formularza. W odróżnieniu od zwykłego pobierania zwraca bogaty obiekt: kod statusu, nagłówki, surową treść, a w trybie z parsowaniem także listę linków, obrazków i pól formularzy. To windowsowy odpowiednik curl czy wget z Linuksa, dlatego w Windows PowerShell ma nawet aliasy curl, wget i iwr.
Składnia i najważniejsze opcje
Podstawowa forma to Invoke-WebRequest [-Uri] .
-Uri— adres, pod który leci żądanie. Parametr pozycyjny, więc często podajesz go bez nazwy.-OutFile <ścieżka>— zapisuje treść odpowiedzi do pliku zamiast trzymać ją w pamięci. Idealne do pobierania plików.-Method— metoda HTTP:Get(domyślna),Post,Put,Delete,Patchitd.-Headers— własne nagłówki, np. autoryzacja czyAccept, podane jako tablica skrótów.-Body— treść żądania: ciąg znaków, hashtable albo JSON wysyłany przyPost/Put.-ContentType— typ wysyłanych danych, np.application/json.-UseBasicParsing— pomija parsowanie DOM silnikiem Internet Explorera. W PowerShell 6+ to już zachowanie domyślne, w Windows PowerShell 5.1 często ratuje skrypt.-SkipCertificateCheck— (PowerShell 6+) ignoruje błędy certyfikatu TLS. Do testów, nie na produkcję.
Przykłady użycia
Invoke-WebRequest -Uri "https://learningzone.pl"— pobiera stronę i zwraca obiekt z treścią, statusem i nagłówkami.Invoke-WebRequest -Uri "https://example.com/plik.zip" -OutFile "C:\temp\plik.zip"— ściąga plik prosto na dysk.(Invoke-WebRequest -Uri "https://api.example.com/status").StatusCode— sprawdza sam kod odpowiedzi, np. czy serwis odpowiada 200.Invoke-WebRequest -Uri "https://api.example.com/users" -Method Post -Body (@{name="Ola"} | ConvertTo-Json) -ContentType "application/json"— wysyła JSON metodą POST do API.Invoke-WebRequest -Uri "https://api.example.com/me" -Headers @{Authorization="Bearer TOKEN"}— dodaje nagłówek z tokenem autoryzacji.
Częste błędy i pułapki
Najczęstsza wpadka to zwracany obiekt zamiast czystego tekstu: jeśli chcesz samą treść strony, sięgnij po właściwość .Content. Pamiętaj też, że dla pracy z REST API zwykle wygodniejszy jest Invoke-RestMethod, bo sam parsuje JSON do obiektu.
Druga pułapka: aliasy. W Windows PowerShell 5.1 curl i wget to tak naprawdę Invoke-WebRequest, więc skrypty przeklejone z Linuksa robią coś zupełnie innego niż prawdziwy curl. W PowerShell 7+ tych aliasów nie ma — wywołujesz wtedy systemowy curl.exe.
Trzecia: w 5.1 cmdlet potrafi się wieszać na parsowaniu DOM lub krzyczeć o niezalogowanym Internet Explorerze. Dodaj -UseBasicParsing i będzie spokój. -SkipCertificateCheck działa dopiero od wersji 6 i jest tylko do testów, bo wyłącza weryfikację TLS.
Powiązane komendy: Invoke-RestMethod, Start-BitsTransfer, curl, wget.