如何在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以将域列入白名单。
在这里贴这个节省时间;)