Как сделать аутентифицированный веб-запрос в Powershell?

В С# я могу сделать что-то вроде этого:

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

Есть ли версия Powershell, или я просто позвоню в CLR?

Ответ 1

PowerShell почти то же самое.

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

Ответ 2

Для тех, кому нужна Powershell для возврата дополнительной информации, такой как Http StatusCode, вот пример. Включены два наиболее вероятных способа передачи учетных данных.

Его слегка измененная версия этого SO-ответа:
Как получить числовые коды состояния HTTP в 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"

Ответ 3

В некоторых случаях аутентификация NTLM по-прежнему не будет работать, если заданы правильные учетные данные.

Существует механизм, который лишает NTLM-аутентификацию в WebClient, см. здесь для получения дополнительной информации: System.Net.WebClient не работает с Windows Authentication

Если вы пытаетесь ответить выше и все еще не работаете, следуйте приведенной выше ссылке, чтобы добавить реестр, чтобы сделать домен включенным.

Отправить это здесь, чтобы сохранить другое время;)