Вопрос или проблема
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri 'https://10.45.210.143/admin/advanced/Phone.json?request'
$url = "https://10.45.210.143/admin/advanced/Phone.json?request"
$jsonData = Invoke-RestMethod -Uri $url -Method GET -UseBasicParsing
# Найти запись с "name": "PSK 1" и извлечь "value"
$psk1Value = $jsonData | Where-Object { $_.name -eq "PSK 1" } | Select-Object -ExpandProperty value
# Проверить, была ли найдена значение, и отобразить его
if ($psk1Value) {
Write-Host "Значение для 'PSK 1' равно: $psk1Value"
}
возвращает
Invoke-WebRequest : Основное соединение было закрыто: Произошла неожиданная ошибка при отправке.
На строке:4 символ:1
+ Invoke-WebRequest -Uri 'https://10.45.210.143/admin/advanced/Phone.js ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Invoke-RestMethod : Основное соединение было закрыто: Произошлаunexpected ошибка при отправке.
На строке:6 символ:13
+ $jsonData = Invoke-RestMethod -Uri $url -Method GET -UseBasicParsing
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Пытаюсь распарсить данные Java… испытываю большие трудности. Есть идеи?
Пытаюсь распарсить данные Java, чтобы отобразить содержимое, относящееся к “PSK 1”
пример Java из JSON-
"line": "one",
"type": 1,
"v": "string",
"min": 0,
"max": 511,
"value": "fnc=xml;url=https://usea.dm.sdg.teams.microsoft.com/device/logout.php/mmiiaacc/007686ce82361728055596pI6ZuvWzqw80xZNnNw9z/lang_en/;vid=n;nme=Sign Out",
"name": "PSK 1",
"index": 6097,
"tab": 6
URL в “value” это то, что я пытаюсь получить.
Ответ или решение
Чтобы решить проблему с ошибкой "Подключение было закрыто", возникающей при выполнении команд Invoke-WebRequest
и Invoke-RestMethod
, необходимо рассмотреть несколько аспектов, которые могут вызвать это поведение. Приведенные вами команды PowerShell предназначены для отправки HTTP-запросов к веб-интерфейсу Cisco и получения JSON-данных.
Возможные причины проблемы и решения
-
Проблемы с сертификатом SSL:
Убедитесь, что ваше окружение позволяет игнорировать проверки SSL (что вы уже сделали с помощьюServerCertificateValidationCallback = { $true }
). Но это не всегда рекомендуется из соображений безопасности. -
Протокол безопасности:
Вы уже установили параметры для использования TLS 1.0, 1.1 и 1.2. Убедитесь, что ваш сервер поддерживает эти протоколы. Если сервер поддерживает только более новые версии TLS (например, TLS 1.2), вам нужно убедиться, что это правильно настроено. В PowerShell вы можете попробовать следующее: -
Файрвол и сетевые настройки:
Убедитесь, что ваш клиент может достучаться до IP-адреса10.45.210.143
и порт, используемый для HTTPS (обычно 443), не заблокирован. Это можно проверить с помощью командыTest-NetConnection
:Test-NetConnection -ComputerName 10.45.210.143 -Port 443
-
Проверка доступности URL:
Откройте веб-браузер и попробуйте получить доступ к URLhttps://10.45.210.143/admin/advanced/Phone.json?request
. Это поможет убедиться, что URL доступен и никаких дополнительных аутентификаций не требуется. -
Логи и дополнительные сведения:
Проверяйте логи на самом устройстве Cisco на наличие сообщений об ошибках или предупреждений, связанных с посылаемыми запросами. Иногда настройки на устройстве могут блокировать запросы с определенными заголовками или параметрами.
Извлечение значения PSK 1
После исправления ошибок соединения, ваш скрипт должен работать корректно. Чтобы извлечь значение из JSON и получить URL, который находится в value
, можете использовать следующий подход:
# Устанавливаем протоколы безопасности
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# Запрос данных
$url = 'https://10.45.210.143/admin/advanced/Phone.json?request'
$jsonData = Invoke-RestMethod -Uri $url -Method GET -UseBasicParsing
# Находим значение "PSK 1"
$psk1Entry = $jsonData | Where-Object { $_.name -eq "PSK 1" }
# Проверяем, найдено ли значение
if ($psk1Entry) {
$urlValue = $psk1Entry.value
Write-Host "Содержимое для 'PSK 1': $urlValue"
# Дополнительно можете извлечь URL из значения, если это необходимо
$parsedUrl = $urlValue -replace "fnc=xml;url=", "" # пример извлечения URL
Write-Host "Извлеченный URL: $parsedUrl"
} else {
Write-Host "Не найдено значение для 'PSK 1'."
}
Заключение
После внесения указанных изменений в код и проверок соединения, ваше приложение должно работать корректно и возвращать необходимую информацию из JSON-ответа. Если проблема сохраняется, возможно, потребуется дополнительная диагностика на уровне сетевой инфраструктуры или индивидуальные настройки веб-интерфейса Cisco.