Сбой при подключении Exchange Online при передаче прокси и запуске в системном PowerShell — TokenProvider возвращает ошибку ссылки на объект

#powershell #azure-active-directory #office365 #exchangewebservices

#powershell #azure-active-directory #office365 #exchangewebservices

Вопрос:

Я подключал Exchange Online с помощью окна PowerShell, которое открывается при доступе к системе. Я использовал PsExec в командной строке с повышенными правами, чтобы открыть системный доступ к PowerShell. Ниже приведена команда.

 PSExec -i -s PowerShell
 

В PowerShell я импортировал последнюю версию модуля PowerShell для управления Exchange Online версии 2.0.3. Я использую аутентификацию на основе приложений, описанную здесь: https://docs.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps#setup-app-only-authentication.

Есть еще один веб-сайт, который показывает, как подключиться с помощью аутентификации на основе приложений: https://o365reports.com/2020/07/04/modern-auth-and-unattended-scripts-in-exchange-online-powershell-v2.

Ниже приведены команды, используемые для подключения к Exchange Online.

 Import-Module .ExchangeOnlineManagement
$sessopt = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck -ProxyAccessType IEConfig
$certkey = ConvertTo-SecureString "<EnterCertificateKeyHere>" -AsPlainText -Force
Connect-ExchangeOnline -CertificateFilePath "pfx Certificate Path" -AppId <EnterAppIdHere> -Organization "domain.onmicrosoft.com" -CertificatePassword $certkey -PSSessionOption $sessopt -verbose
 

При выполнении вышеуказанного он возвращает ошибку ссылки на объект. Я был взволнован и продолжил поиск ошибки путем декомпиляции DLL-файлов и обнаружил, что внутри ‘ ExoPowershellGalleryModule.dll -> NewExoPSSession.cs ‘ модуля Exchange функция ‘getAccessToken’, которая вызывается в строке: 308, вызывает эту ошибку. Есть идеи, что вызывает Object reference not set to an instance of an object. System.Management.Automation.RemoteException: Object reference not set to an instance of an object. ошибку. Не был ли прокси-сервер взят из IE?

Я установил настройки прокси-сервера в IE, используя приведенную ниже команду Powershell -позволяет использовать system PowerShell.

 Set-ItemProperty -Path 'HKCU:SoftwareMicrosoftWindowsCurrentVersionInternet Settings' -name ProxyServer -Value "ProxyServerAddress"
Set-ItemProperty -Path 'HKCU:SoftwareMicrosoftWindowsCurrentVersionInternet Settings' -name ProxyEnable -Value 1
 

Приветствуется любая помощь в решении этой проблемы.

Ответ №1:

Если вы используете

 PSExec -i -s PowerShell
 

Тогда информация о прокси, которую вы вводите для пользователя, не будет иметь никакого эффекта, поскольку локальная системная учетная запись будет иметь свою собственную информацию профиля. Кроме того, если прокси-серверу требуется проверка подлинности, вы также не будете предоставлять какие-либо сетевые учетные данные.

Если вы действительно хотите работать под системной учетной записью, вы можете попробовать использовать netsh для настройки прокси https://docs.microsoft.com/en-us/windows/security/threat-protection/microsoft-defender-atp/configure-proxy-internet но если вам нужна аутентификация прокси-сервера, это не сработает.

Комментарии:

1. Использование Netsh также выдает ошибку, но на этот раз кажется, что модуль Exchange не выбирает прокси из WinHTTP.