PS Invoke-RestMethod: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера - PullRequest
0 голосов
/ 12 марта 2019

У меня есть сценарий PowerShell, который собирает данные от Dell в формате XML с помощью URL-адреса и ключа API.

Сценарий работал отлично, я попытался отловить некоторые ошибки, которые не сработали, и поэтому вернул его обратно, и он вдруг не работает. Это точно так же, как и было, поэтому я очень смущен. Еще интереснее , оригинальный сценарий, который я оставил без изменений, работал, и я только скопировал его, чтобы адаптировать для своей организации, и теперь выдает ту же ошибку. Похоже, PowerShell больше не хочет общаться с сайтом в целом?

Ошибка:

Invoke-RestMethod : The remote server returned an error: (500) Internal Server Error.

+ ...  $Request = Invoke-RestMethod -URI $URL -Method GET -contenttype 'App ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Код:

$results = @()
$result = New-Object System.Object
$result | Add-Member -MemberType NoteProperty -Name "Service Tag" -Value ""
$result | Add-Member -MemberType NoteProperty -Name "ProSupport Start" -Value ""
$result | Add-Member -MemberType NoteProperty -Name "ProSupport End" -Value ""

foreach ($computer in $E)
{

    $ServiceTag = $computer."Service Tag"

    $URL = "https://api.dell.com/support/assetinfo/v4/getassetwarranty/$ServiceTag"+"?apikey=$APIKey"

    $result = New-Object System.Object
    $result | Add-Member -MemberType NoteProperty -Name "Service Tag" -Value $ServiceTag

    $Request = Invoke-RestMethod -URI $URL -ContentType 'Application/XML'

    $Warranty = $Request.AssetWarrantyDTO.AssetWarrantyResponse.AssetWarrantyResponse.AssetEntitlementData.AssetEntitlement | 
    WHERE ServiceLevelDescription -EQ 'ProSupport' 

    if ($Warranty -is [Object])
    {

        for ($i = 1; $i -le $Warranty.Count; $i++)
        {

            $SLA=$Warranty[$i].ServiceLevelDescription 
            $SLAtype=$Warranty[$i].EntitlementType

            $EndDate=$Warranty[$i].EndDate -replace ".{9}$"
            $StartDate=$Warranty[$i].StartDate -replace ".{9}$"

            if ($SLA -like "*ProSupport*" -and $SLAtype -eq "INITIAL") {
                $result | Add-Member -Force -MemberType NoteProperty -Name "ProSupport Start" -Value $StartDate -ErrorAction SilentlyContinue
                $result | Add-Member -Force -MemberType NoteProperty -Name "ProSupport End" -Value $EndDate -ErrorAction SilentlyContinue
            } # END IF

        } # END FOR

    } # END IF

} # END FOREACH

$result
$results += $result
Sleep(1)

$results | Export-CSV -NoTypeInformation -Path $outputFile

Что я пробовал:

  • Изменить аргументы команды Invoke-RestMethod для нескольких форумов.
  • Напечатайте полную переменную URL как дополнительный шаг, скопируйте ее и вставьте в браузер; проверил, что он отлично переходит на сайт в формате XML ...

Буду признателен за любую помощь, лучше или другие способы работы!

Примечание: Я ищу хороший способ проверить наличие других ошибок I.E. значение сервисного тега пустое. Я попробовал TRY / CATCH, охватывающий внутреннюю часть FOREACH, за исключением инициализации переменной $ ServiceTag, она не сработала, и именно тогда она развалилась.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...