2012-09-05 50 views
15

Tôi đang cố gắng sử dụng PowerShell để đăng nhập vào một trang web và tải xuống một tệp.Cách đăng nhập vào trang web với xác thực cơ bản bằng cách sử dụng Powershell

Tuy nhiên tôi không thể nhận được PS để chuyển chứng chỉ đúng cách.

Đây là PS của tôi:

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

Dưới đây là các bản ghi trong hộp tôi nhận được khi tôi nhấn các trang web trong IE: enter image description here

Trả lời

15

Đây là những gì tôi phải làm việc. Tôi tin rằng phần quan trọng là "cơ bản" trong 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

Những gì bạn có nên làm việc (thử mã với một số khác trang web). Thông thường, tên người dùng/mật khẩu không hợp lệ sẽ khiến mã không thành công với lỗi 401 (không phải cửa sổ đăng nhập bảo mật cửa sổ). Sự cố có thể liên quan đến trang web yêu cầu Windows Integrated Authentication

5

Nếu bạn muốn sử dụng Invoke-WebRequest thay vì WebClient:

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

tôi dựa trên mã this blog article by Douglas Tarr. Lưu ý rằng trong bài viết tên người dùng và mật khẩu bị nhầm lẫn, nhưng tôi đã sửa chúng trong mẫu của tôi.

0

Đây là cách tôi đã làm nó,

đầu tiên tạo ra một download.ps1 tập tin có chứa các kịch bản PowerShell,

Sau đó chạy kịch bản này thông qua một tập tin thực thi:

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

đây là tập lệnh 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

Vì một số lý do tôi không thể thực hiện bất kỳ giải pháp nào trong số các giải pháp này (sử dụng PowerShell 5 trên Win 10). Có lẽ có lẽ là một tình huống rõ ràng, ngu ngốc vì tôi không thường xuyên sử dụng PS. Nhưng FWIW đây là cách tôi đã có thể làm cho nó hoạt động, bằng cách đặt tiêu đề Cấp phép theo cách thủ công.

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

Vì lý do gì, các câu trả lời khác ở đây đã đưa ra yêu cầu nhưng không có tiêu đề Ủy quyền nào được gửi.

Các vấn đề liên quan