如何在Powershell中进行经过身份验证的Web请求?

时间:2009-02-03 19:36:18

标签: powershell

在C#中,我可能会这样做:

System.Net.WebClient w = new System.Net.WebClient();
w.Credentials = new System.Net.NetworkCredential(username, auth, domain);
string webpage = w.DownloadString(url);

是否有Powershell版本,或者我应该拨打CLR

3 个答案:

答案 0 :(得分:66)

PowerShell几乎完全相同。

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

答案 1 :(得分:26)

对于那些需要Powershell来返回Http StatusCode等附加信息的人来说,这是一个例子。包括两种最有可能传递凭证的方式。

这个SO答案的略微修改版本:
How to obtain numeric HTTP status codes in PowerShell

$req = [system.Net.WebRequest]::Create($url)
# method 1 $req.UseDefaultCredentials = $true
# method 2 $req.Credentials = new NetworkCredential($username, $pwd, $domain); 
try
{
    $res = $req.GetResponse()
}
catch [System.Net.WebException]
{
    $res = $_.Exception.Response
}

$int = [int]$res.StatusCode
$status = $res.StatusCode
return "$int $status"

答案 2 :(得分:2)

在某些情况下,如果给出正确的凭据,NTLM身份验证仍然无效。

有一种机制会使WebClient中的NTLM auth无效,请参阅此处以获取更多信息:System.Net.WebClient doesn't work with Windows Authentication

如果您正在尝试上述答案并且仍然无效,请按照上述链接添加注册表以将域列入白名单。

发布此处以节省其他时间;)