如何在PowerShell中进行身份validation的Web请求?

在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调用?

PowerShell几乎完全一样。

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

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

它是一个稍微修改的版本这个答案:
如何在PowerShell中获取数字HTTP状态码

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

在某些情况下,如果给予正确的证书,NTLM身份validation仍然不起作用。

有一种机制会使WebClient中的NTLM身份validation失效,请参阅此处以获取更多信息: System.Net.WebClient不适用于Windows身份validation

如果您尝试以上回答,但仍然无效,请按照上述链接添加registry以将域列入白名单。

在这里贴这个节省时间;)