2012-09-05 16 views
15

Estoy tratando de usar PowerShell para iniciar sesión en un sitio web y descargar un archivo.Cómo iniciar sesión en el sitio web con autenticación básica usando Powershell

Sin embargo, no puedo hacer que la EP pase correctamente las credenciales.

Aquí es mi PS:

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

Aquí es el registro en el cuadro de recibo cuando golpeo el sitio en IE: enter image description here

Respuesta

15

Esto es lo que tengo que trabajar. Creo que la parte clave es la "base" en el 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") 
-1

Lo que tienes debería funcionar (probar el código con algún otro sitios). Normalmente, un nombre de usuario/contraseña no válido haría que el código fallara con un error 401 (no la ventana de inicio de sesión de seguridad de Windows). El problema puede estar relacionado con el sitio web que requiere Windows Integrated Authentication

5

Si desea utilizar Invoke-WebRequest en lugar de la WebClient:

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

basé en el código this blog article by Douglas Tarr. Tenga en cuenta que en el artículo el nombre de usuario y la contraseña son confusos, pero los he corregido en mi muestra.

0

Esta es la forma en que lo hice,

primero crea un archivo download.ps1 que contiene la secuencia de comandos PowerShell,

Luego de ejecutar esta secuencia de comandos a través de un archivo por lotes:

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

este es el script de 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) 
3

Por alguna razón, no pude hacer funcionar ninguna de estas soluciones (usando PowerShell 5 en Win 10). Tal vez podría ser una situación obvia, inflexible, ya que no uso PS con mucha frecuencia. Pero FWIW así es como pude hacer que funcione, configurando manualmente el encabezado Authorization.

$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} 

Por alguna razón, las otras respuestas aquí hicieron solicitudes pero nunca se envió ningún encabezado de Autorización.

Cuestiones relacionadas