У меня есть сценарий 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, она не сработала, и именно тогда она развалилась.
Спасибо!