Получение "Невозможно найти тип [System.Net.ServicePointManager]." в PowerShell для OS X
Я пытаюсь отладить скрипт, который делает вызов https с помощью Invoke-WebRequest. Поскольку он не разрешает запрос из-за ошибок сертификата, мне нужно выполнить следующую команду, чтобы отключить проверку SSL:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Однако, когда я пытаюсь выполнить эту команду, я получаю следующую ошибку:
Unable to find type [System.Net.ServicePointManager].
At line:1 char:1
+ [System.Net.ServicePointManager]::ServerCertificateValidationCallback ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.ServicePointManager:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
ОС: macOS Sierra
Чтобы повторить проблему:
Загрузите PowerShell для OS X с веб- сайта https://github.com/PowerShell/PowerShell
Установите.pkg
Введите "powershell" в терминале
Попытайтесь запустить команду выше.
1 ответ
В Windows PowerShell вплоть до версии 5 требовался обходной путь, который вы пытались использовать, поскольку командлет Invoke-WebRequest не имел удобного способа игнорировать проверки сертификатов.
В PowerShell 6+ из-за преобладания самозаверяющих сертификатов в мире открытого исходного кода Invoke-WebRequest был обновлен и теперь содержит множество новых параметров коммутатора для работы с ними. В частности, посмотрите на -SkipCertificateCheck
параметр в документации для командлета.
Этот параметр позволит вам принять неизвестный сертификат для шифрования вашего соединения, как вы пытаетесь сделать здесь.
Не очень знаком с этим, но... предоставленная вами ссылка PowerShell для OS X, по-видимому, использует.NET Core. Тем не мение, System.Net.ServicePointManager
не поддерживается.NET Core.
Покопавшись, я смог найти вопрос Stackru, который привел к этой проблеме, а затем к этой проблеме, но, честно говоря, я немного растерялся, потому что номера версий относятся ко многим различным вещам. Я не могу сказать, что сейчас, а что нет.
В итоге, насколько я могу судить, правильный метод для.Net Core должен быть HttpClientHandler.ServerCertificateCustomValidationCallback
в System.Net.Http
, но я не совсем уверен, как вы относитесь к этому с PowerShell.