如何使用Powershell使用基本身份验证登录网站

Cla*_*ein 17 powershell

我正在尝试使用PowerShell登录网站并下载文件.

但是,我无法让PS正确传递凭据.

这是我的PS:

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

这是我在IE浏览网站时得到的登录框: 在此输入图像描述

Cla*_*ein 16

这就是我的工作.我相信关键部分是CredentialCache中的"Basic"

$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")
Run Code Online (Sandbox Code Playgroud)


Aar*_*n D 6

如果你想使用Invoke-WebRequest而不是WebClient:

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

我根据Douglas Tarr的博客文章编写了代码.请注意,在文章中,用户名和密码是混淆的,但我已在我的示例中修复它们.


k3d*_*vis 5

由于某种原因,我无法使这些解决方案中的任何一个发挥作用(在 Win 10 上使用 PowerShell 5)。也许这是一个明显的、鲁莽的情况,因为我不经常使用 PS。但FWIW这就是我通过手动设置授权标头使其工作的方式。

$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} 
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,这里的其他答案确实发出了请求,但没有发送任何授权标头。