Назад | Перейти на главную страницу

New-PSSession с локальным сервером Exchange не работает «Доступ запрещен»

У меня есть сценарий, который запускается с веб-сервера через веб-страницу, которая подключается к серверу обмена (Exchange 2013 на Windows 2012 R2). Веб-сервер работает под управлением Windows 2012 R2. Скрипт запускается в контексте пользователя, подключенного к сайту.

Выполняя некоторые тесты, случаются следующие сценарии:

В $request Объекты - это то, как сценарий получает учетные данные для подключения для обмена и правильной работы, что подтверждается текстами.

Я думал, что это может быть проблема второго прыжка, но это не объясняло, почему он работает, когда пользователь является локальным администратором на сервере, с которого запускается скрипт?

Единственное, что кажется важным, это то, является ли пользователь, запускающий сценарий, локальным администратором на сервере, с которого он запущен, тогда соединение будет успешным, пока предоставлены учетные данные, которые имеют доступ к обмену.

После дальнейшего расследования я думаю, что мне нужно как-то запустить команду New-PSSession в контексте ее отправки пользователем с повышенными привилегиями, так как у него есть права локального администратора на сервере, но я не уверен, как этого добиться, поскольку я технически не вызывая сценарий, поэтому я могу открыть новый экземпляр Powershell.exe как пользователь с повышенными привилегиями.

Я также должен добавить, что просто использовать для этого оболочку нельзя, цель сайта - избавиться от зависимости от пользователей, подключающихся к удаленному экземпляру PowerShell и выполняющих команды вручную.

Проблема в том, что невозможно открыть сеанс на основе Kerberos на другом сервере, если у пользователя нет прав локального администратора, поэтому ответ состоит в том, чтобы установить инструменты обмена на исходном сервере, а затем открыть сеанс на основе CredSSP с самим собой, используя предоставленные повышенные учетные данные и импортировать нужные мне команды обмена.

********** редактировать

Согласно приведенному ниже комментарию, я фактически использовал Invoke-Command вместо сеанса CredSSP:

Invoke-Command -ComputerName "localhost" -EnableNetworkAccess -Credential $creds -ScriptBlock { 
  param($creds, $username) 
  & 'C:\Program Files\Microsoft\Exchange Server\V15\Bin\RemoteExchange.ps1' | out-null;
  Connect-OnPremExchange -ComputerName "exchangeserver" -Credential $creds;
  try{
    Enable-RemoteMailbox "$($username)" -RemoteRoutingAddress "$($username)@network.mail.onmicrosoft.com" | out-null
  }catch [Exception]{
    $errorFlag = "error"
  }finally{
  }
  return $errorFlag
} -ArgumentList $creds, $request['username']

Интересно также отметить, что, хотя это работает для команд обмена, облегченные службы Active Directory не любят работать таким же образом. Когда я попытался вызвать команду с поднятыми учетными данными на локальном хосте для Add-ADGroupMember, он не смог связаться с сервером или распознать, что AD работает, но это все еще работает с использованием New-PSSession на локальном хосте через CredSSP.

Пожалуйста, проверьте сайт по умолчанию сервера Exchange (IIS) и назначенные сертификаты, они могут быть потеряны.