18

我正在尝试使用 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")

这是我在 IE 中访问该站点时得到的登录框: 在此处输入图像描述

4

5 回答 5

16

这就是我要工作的。我相信关键部分是 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")
于 2012-09-05T14:56:16.507 回答
7

如果你想使用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

我的代码基于Douglas Tarr 的这篇博客文章。请注意,在文章中,用户名和密码被混淆了,但我已经在我的示例中修复了它们。

于 2014-12-04T23:38:49.283 回答
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} 

无论出于何种原因,此处的其他答案确实提出了请求,但从未发送过 Authorization 标头。

于 2016-06-09T13:03:08.780 回答
1

我是这样弄的

首先创建了一个包含 powershell 脚本的download.ps1文件,

然后通过批处理文件运行此脚本:

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

这是 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 )
于 2016-01-12T14:41:49.500 回答
-1

你所拥有的应该可以工作(在其他一些网站上尝试代码)。通常,无效的用户名/密码会导致代码失败并出现 401 错误(不是 Windows 安全登录窗口)。该问题可能与需要Windows 集成身份验证的网站有关

于 2012-09-05T14:37:49.577 回答