Come accedere al sito Web con l’autenticazione di base tramite Powershell

Sto cercando di utilizzare PowerShell per accedere a un sito Web e scaricare un file.

Tuttavia non riesco a convincere PS a trasmettere le credenziali correttamente.

Ecco il mio PS:

$webclient = new-object System.Net.WebClient $webclient.Credentials = new-object System.Net.NetworkCredential("username","password","domain") $webpage = $webclient.DownloadString("url goes here") 

Ecco la casella di accesso che ottengo quando ho colpito il sito in IE: inserisci la descrizione dell'immagine qui

Questo è quello che ho avuto modo di lavorare. Credo che la parte fondamentale sia il “Basic” in CredentialCache

 $webclient = new-object System.Net.WebClient $credCache = new-object System.Net.CredentialCache $creds = new-object System.Net.NetworkCredential("un","pw") $credCache.Add("url", "Basic", $creds) $webclient.Credentials = $credCache $webpage = $webclient.DownloadString("url") 

Se si desidera utilizzare Invoke-WebRequest anziché il WebClient :

 $securepassword = ConvertTo-SecureString "password" -AsPlainText -Force $credentials = New-Object System.Management.Automation.PSCredential("username", $securepassword) Invoke-WebRequest -Uri "url goes here" -Credential $credentials 

Ho basato il codice su questo articolo del blog di Douglas Tarr . Si noti che nell’articolo il nome utente e la password sono confusi, ma li ho risolti nel mio esempio.

Per qualche motivo non sono riuscito a far funzionare nessuna di queste soluzioni (utilizzando PowerShell 5 su Win 10). Potrebbe forse essere una situazione ovvia e faticosa dal momento che non uso PS molto spesso. Ma FWIW è così che sono riuscito a farlo funzionare, impostando manualmente l’intestazione Autorizzazione.

 $url = "{url here}" $username = "{username here}" $password = "{password here}" $b = [System.Text.Encoding]::UTF8.GetBytes($username + ":" + $password) $p = [System.Convert]::ToBase64String($b) $creds = "Basic " + $p Invoke-WebRequest -Uri $url -Headers @{"Authorization"=$creds} 

Per qualsiasi motivo, le altre risposte qui hanno fatto richieste ma nessuna intestazione di authorization è stata mai inviata.

Questo è come l’ho fatto,

prima ha creato un file download.ps1 che contiene lo script PowerShell,

Quindi eseguendo questo script attraverso un file batch:

 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\Users\SS\Desktop\download.ps1 

questo è lo script di PowerShell:

  $Username = 'Domain\user' $Password = 'pass' $Url = "http://google.com/target/filename.zip" $Path = "C:\path\to\downloaded\file\filename.zip" $WebClient = New-Object System.Net.WebClient $WebClient.Credentials = New-Object System.Net.Networkcredential($Username, $Password) $WebClient.DownloadFile( $url, $path ) 

Quello che hai dovrebbe funzionare (prova il codice con altri siti). Normalmente, un nome utente / una password non validi potrebbero causare il fallimento del codice con un errore 401 (non la finestra di login di sicurezza di Windows). Il problema potrebbe essere correlato al sito Web che richiede l’autenticazione integrata di Windows