Powershell: Net.Webclient - не получает ответ из интрасети в зависимости от компьютера
Приветствую всех,
У меня самая странная проблема, для которой мне нужны ваши идеи помощи, как подойти к проблеме.
Итак, у меня есть сценарий загрузки, который извлекает контент из внутренней сети компании с помощью объектов Webclient. Для этого требуются учетные данные, и он работает примерно на 80% компьютеров. Сценарий извлекает список, используя .DownloadString
а затем анализирует и получает некоторые файлы, используя .DownloadFile
,
На машинах, которые не будут работать с начальной .DownloadString
зависает, пока не появится тайм-аут и не возвращается $null
, Учетные данные пользователя не имеют отношения к этим типам компьютеров, а это означает, что пользователь, работающий на другом компьютере, не сможет работать на этом компьютере. Адреса, если они введены в браузер, возвращают содержимое.
Говоря в коде, я пытаюсь это так:
$wc = new-object System.Net.WebClient
$wc.Credentials = new-object System.Net.NetworkCredential($user, $pass, $domain)
$old_eap = $ErrorActionPreference
$ErrorActionPreference = "Stop"
try
{
$tmp = $wc.DownloadString($url)
if ([String]::IsNullOrEmpty($tmp))
{
throw "Intranet server did not return directory listing"
}
Return $tmp #the code is actually part of a function...
}
catch
{
write-error $_.Exception.Message
Return $null
}
finally
{
$ErrorActionPreference = $old_eap
}
Я понятия не имею, кроме как искать измененные настройки между различными машинами. Но какие настройки могут иметь отношение к поведению Webclient? Есть идеи? Я серьезно застрял...
Я забыл... Чтобы сделать вещи немного проще, я застрял с версией 2.0, и мы пока не можем обновить. Облом...
Заранее спасибо Алекс
1 ответ
Возможно, попробуйте использовать xmlhttp в качестве клиента. Ниже приведен пример использования.
$url = "https://example.com/"
$http = New-Object -ComObject Msxml2.XMLHTTP
$user = "Domain\username"
$pwd = "password"
$utf = [System.Text.Encoding]::UTF8
$http.open("GET", $url, $false, $user, $pwd)
$http.send()
$result = $utf.GetString($http.responseBody)