Invoke-WebRequest în PowerShell

Rețea și web Windows PowerShell 3.0

Trimite o cerere HTTP sau HTTPS și întoarce răspunsul complet (cod de stare, antete, conținut, linkuri); poate și descărca fișiere.

Sintaxă
Invoke-WebRequest [-Uri] <Uri> [-Method <WebRequestMethod>] [-Headers <IDictionary>] [-Body <Object>]
Invoke-WebRequest [-Uri] <Uri> -OutFile <String> [-Resume]

Ce face Invoke-WebRequest

Invoke-WebRequest trimite o cerere către o pagină sau un serviciu web și întoarce un obiect BasicHtmlWebResponseObject cu proprietățile StatusCode, StatusDescription, Content (corpul răspunsului), Headers, Links, Images, InputFields și RawContentLength. Îl folosești când te interesează răspunsul HTTP în sine sau când descarci un fișier cu -OutFile; pentru API-uri JSON, Invoke-RestMethod îți dă direct datele convertite.

Din PowerShell 6.0, toate cererile folosesc doar parsarea simplă a HTML-ului, iar -UseBasicParsing a rămas numai pentru compatibilitate și nu mai are niciun efect. În Windows PowerShell 5.1 parsarea completă depindea de Internet Explorer, de aceea vei vedea des -UseBasicParsing în scripturile vechi. Din PowerShell 7.4, codificarea implicită a cererilor este UTF-8 (înainte era ASCII), iar -OutFile poate primi doar un folder: numele fișierului se ia din ultima parte a adresei.

Pentru un răspuns cu cod de eroare (404, 500 etc.), comanda nu întoarce nimic și aruncă o eroare care oprește execuția; o prinzi cu try/catch sau adaugi -SkipHttpErrorCheck (din PowerShell 7.0) ca să primești răspunsul ca pe unul reușit. Din PowerShell 7.0, proxy-ul se citește și din variabilele de mediu HTTP_PROXY, HTTPS_PROXY și NO_PROXY. Alias: iwr.

Parametri

Parametru Descriere
-Uri Adresa cererii. Este parametrul pozițional, deci poate lipsi numele lui.
-Method Metoda HTTP: Get (implicit), Post, Put, Patch, Delete, Head, Options etc. Pentru alte metode există -CustomMethod.
-Headers Tabel hash cu antetele cererii, de exemplu @{ Authorization = "Bearer $token" }.
-Body Corpul cererii. Un tabel hash la o cerere GET devine parametri în adresă; la alte metode este trimis în format nume=valoare.
-ContentType Tipul conținutului trimis, de exemplu application/json; charset=utf-8.
-OutFile Salvează răspunsul în fișier în loc să-l întoarcă. Cu -PassThru le faci pe amândouă.
-Resume Reia descărcarea unui fișier parțial (cere -OutFile). Din PowerShell 6.1.
-SkipHttpErrorCheck Tratează răspunsurile 4xx și 5xx ca reușite, fără eroare. Din PowerShell 7.0.
-ConnectionTimeoutSeconds Câte secunde poate aștepta cererea; 0 (implicit) înseamnă fără limită. Din PowerShell 7.4 înlocuiește -TimeoutSec, care a rămas alias.
-MaximumRetryCount / -RetryIntervalSec De câte ori și la ce interval reîncearcă la coduri între 400 și 599 sau 304.
-SessionVariable / -WebSession Creează, respectiv refolosește o sesiune web cu cookie-uri, antete și credențiale.
-SkipCertificateCheck Nu verifică certificatul HTTPS (doar pentru teste, de exemplu certificate autosemnate). Din PowerShell 6.0.

Ce returnează

Un obiect BasicHtmlWebResponseObject; cu -OutFile fără -PassThru, nimic.

Exemple

Exemplul 1: Codul de stare și tipul conținutului unei pagini

Salvăm răspunsul într-o variabilă și citim două proprietăți ale lui.

$r = Invoke-WebRequest -Uri https://www.exemplu.ro
$r.StatusCode
$r.Headers['Content-Type']

Ieșire în terminal

200
text/html; charset=UTF-8

Exemplul 2: Descărcarea unui fișier

Cu -OutFile conținutul ajunge direct în fișier; în terminal apare doar bara de progres, apoi nimic.

Invoke-WebRequest -Uri https://www.exemplu.ro/rapoarte/vanzari-2026.csv -OutFile C:\Proiecte\facturi\vanzari-2026.csv

Exemplul 3: Verificarea unei pagini care lipsește, fără eroare

Cu -SkipHttpErrorCheck, răspunsul 404 este întors normal și poți citi codul de stare.

$r = Invoke-WebRequest -Uri https://www.exemplu.ro/pagina-veche -SkipHttpErrorCheck
$r.StatusCode

Ieșire în terminal

404

Greșeli frecvente

  • Folosești Invoke-WebRequest pentru un API JSON și apoi parsezi manual .Content: Invoke-RestMethod face conversia automat (sau trimite .Content la ConvertFrom-Json).
  • Aștepți ca un răspuns 404 să fie pus în variabilă: fără -SkipHttpErrorCheck, comanda aruncă o eroare, iar variabila rămâne goală.
  • Citești $r.ParsedHtml din exemple pentru Windows PowerShell 5.1: în PowerShell 7 proprietatea nu există; folosește Links, Images sau Content.
  • Pui -SkipCertificateCheck în scripturi de producție: dezactivează verificarea certificatului și expune conexiunea; folosește-l doar la teste.

Comenzi înrudite

  • Invoke-RestMethod: Apelează un API REST și transformă automat răspunsul JSON sau XML în obiecte PowerShell, gata de filtrat și afișat.
  • try / catch / finally: try/catch prinde erorile care opresc o comandă, iar finally rulează mereu; pentru erorile obișnuite ale cmdlet-urilor pui -ErrorAction Stop.
  • ConvertFrom-Json: Transformă un text JSON în obiecte PowerShell (sau hashtable-uri), ale căror câmpuri le citești cu punct.
  • Out-File: Salvează într-un fișier ieșirea unei comenzi, exact cum apare în consolă; operatorii de redirecționare > și >> fac același lucru.