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

Ry *_*nes 45 powershell

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

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

是否有Powershell版本,或者我应该打电话给CLR

Ste*_*ski 68

PowerShell几乎完全相同.

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

  • 请注意,如果您只想使用当前的登录凭据(例如,访问Intranet上经过身份验证的服务器),您可以使用`$ webclient.UseDefaultCredentials = $ true`(如[Ralph的回答](http:// stackoverflow). COM /一个/一百四十四万三千四百九十六分之一千二百四十二万一千零七十五)). (6认同)
  • 这是否突然停止对其他人有效?(401) 未经授权 (2认同)

Ral*_*oss 27

对于需要Powershell返回其他信息的人,比如Http StatusCode,这是一个例子.包括两种最有可能传递凭证的方法.

它是这个SO答案的略微修改版本:
如何在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"
Run Code Online (Sandbox Code Playgroud)

  • 我可能错了,但我不得不用`$ passwd = ConvertTo-SecureString"nowisthetime4U"替换`new NetworkCredential`'AsPlainText -Force;`后跟`$ request.Credentials = New-Object System.Management.Automation.PSCredential( "pwatson_at_phs_org",$ passwd);` (5认同)
  • 出色的附加答案,这实际上正是我想要的。 (2认同)