Powershell: Net.Webclient - не получает ответ из интрасети в зависимости от компьютера - PullRequest
0 голосов
/ 19 октября 2018

Приветствует всех,

У меня самая странная проблема, для которой мне нужны ваши подсказки, как подойти к этой проблеме.

Итак, у меня есть скрипт загрузки, который извлекает контент из внутренней сети компании с помощью объектов 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 Ответ

0 голосов
/ 19 октября 2018

Возможно, попробуйте использовать 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)
...