Quando inviamo una richiesta a un server, o un indirizzo web, questa genera un codice di risposta che indica lo stato della pagina. Tra i codici più conosciuti, la lista completa la potete vedere in questa pagina di Wikipedia, ci sono 200 che indica che il sito è funzionante, o quelli che possiamo visualizzare nella pagina web come 401 o 403 accesso non autorizzato e 404 pagina non trovata.
Il cmdlet PowerShell per vedere questi codici è Invoke-WebRequest ed è una alternativa ai comandi Test-netconnection, Ping, Tracert o Telnet per verificare se un sito, o una pagina web, sono raggiungibili.

Il cmdlet, nella sua forma più semplice, prevede Invoke-WebRequest IndirizzoSito, il risultato sarà uno StatusCode 200, se il sito è attivo e raggiungibile, più tutta una serie di informazioni non comprensibili da tutti.

Se ci serve solo sapere se il sito, o la pagina web, sono raggiungibili si può utilizzare questo script, dove nella prima riga va inserito l'indirizzo da controllare.
$Url = "INDIRIZZO DA CONTROLLARE"try {$Response = Invoke-WebRequest -Uri $Url -UseBasicParsing -TimeoutSec 10if ($Response.StatusCode -eq 200) {Write-Host "Il sito $Url è raggiungibile."} else {Write-Host "Il sito restituisce il codice: $($Response.StatusCode)"}} catch {Write-Host "Il sito $Url non è raggiungibile."Write-Host "Errore: $($_.Exception.Message)"}
Nel primo esempio abbiamo un sito raggiungibile, quindi codice 200, nel secondo una pagina non trovata, quindi 404, e nell'ultimo esempio un indirizzo aziendale che richiede login per accedere, codice 401 non autorizzato.

Se invece volessimo controllare una lista di indirizzi, contenuti nel file listaurl.txt, e creare un file di report, status.csv, che contiene i risultati, si può utilizzare questo script. L'unica cosa da modificare, se volete, sono il nome e i percorsi dei due file d:\status.csv e d:\listaurl.txt.
# Rimuovi il file se esiste giàif (Test-Path "d:\status.csv") { Remove-Item "d:\status.csv" }$urls = Get-Content "d:\listaurl.txt"foreach($url in $urls) {try {$response = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 10$statusCode = $response.StatusCode}catch {if ($_.Exception.Response) {$statusCode = [int]$_.Exception.Response.StatusCode} else {$statusCode = "Errore Connessione"}}# Crea e salva l'oggetto nel CSV[PSCustomObject]@{Url = $urlStatus = $statusCode} | Export-Csv "d:\status.csv" -Append -NoTypeInformation}
Il risultato sarà un file di questo tipo.
