Получение "Невозможно найти тип [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 должен быть Http​Client​Handler.​Server​Certificate​Custom​Validation​Callback в System.Net.Http, но я не совсем уверен, как вы относитесь к этому с PowerShell.

Другие вопросы по тегам