PowerShell Remoting с Exchange 2010: значение не может быть нулевым


8

У меня возникают проблемы при запуске командлетов Exchange 2010 через удаленные сеансы PowerShell.

Я запускаю локальный сеанс PowerShell от имени администратора и выполняю следующие команды:

PS C:\Windows\system32> $mailcred = Get-Credential
PS C:\Windows\system32> $mailSession = New-PSSession -ComputerName MAILSRV -Credential $mailcred
PS C:\Windows\system32> Enter-PSSession $mailSession
[MAILSRV]: PS C:\Users\jdoe\Documents> Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
[MAILSRV]: PS C:\Users\jdoe\Documents> hostname
MAILSRV
[MAILSRV]: PS C:\Users\jdoe\Documents> Get-ExchangeServer
Value cannot be null.    
Parameter name: serverSettings
    + CategoryInfo          : 
    + FullyQualifiedErrorId : System.ArgumentNullException,Microsoft.Exchange.Management.SystemConfigurationTasks.GetExchangeServer

[MAILSRV]: PS C:\Users\jdoe\Documents> get-mailbox
Value cannot be null.    
Parameter name: serverSettings
    + CategoryInfo          : 
    + FullyQualifiedErrorId : System.ArgumentNullException,Microsoft.Exchange.Management.RecipientTasks.GetMailbox

Как видите, ни один из командлетов Exchange не работает. В чем может быть проблема?


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

Ага. Они отлично работают на сервере под одной учетной записью. Любой тип удаленного взаимодействия (invoke-команда или интерактивный) терпит неудачу.
шт.

Попробуйте ImportSystemModulesзагрузить загруженные модули в текущее пространство выполнения. Командлеты Exchange не могут автоматически импортироваться в удаленный сеанс / пространство выполнения.
Берни Уайт

Ответы:


2

Вы пытаетесь подключиться к конечной точке удаленного взаимодействия по умолчанию на сервере Exchange и добавить оттуда оснастки ps. Это не верно. Замените свои первые 3 строки этим:

$mailcred = Get-Credential
$mailSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MAILSRV/PowerShell/ -Credential $mailcred
Import-PsSession $mailSession

Вам не нужно входить в сеанс, вместо этого импортируйте его в локальный сеанс. С этого момента вы можете использовать специфичные для Exchange CmdLets локально. Кроме того, некоторые типы Exchange .Net устанавливаются с помощью консоли управления Exchange, поэтому ее необходимо установить на локальном компьютере, если вы хотите выполнять операции с размерами почтовых ящиков (Exchange использует свои собственные типы для объектов размера)


Это правильный путь, установите EMC на вашем менеджменте или рабочей станции для дополнительных услуг PS. Таким образом, локальный PS имеет доступ к инструментам, которые ему нужны при подключении. --- ИЛИ как только вы выполните установку EMC, используйте Exchange Powershell, который устанавливается напрямую. Щелкните правой кнопкой мыши и при необходимости запустите его как пользователь управления. Я использую это все время.
Марк

1

Вы можете сделать это следующим образом, используя import-pssesion и указав соединение URI & ConfigurationName.

PS U:\> $cred = Get-Credential
PS U:\> $session = New-PSSession -ConnectionUri http://Exchange01/powershell -ConfigurationName Microsoft.Exchange -Credential $cred
PS U:\> Import-PSSession $session
PS U:\> Get-Mailbox marius.davidsen

Name                      Alias                ServerName       ProhibitSendQuota                                                                                        
----                      -----                ----------       -----------------                                                                                        
Marius Davidsen           Marius.Davidsen      Exchange01       unlimited             

Это требует, чтобы вы разрешили порт 80 TCP в вашем брандмауэре.

Используя этот сеанс, вы также можете ввести его, как вы хотели:

PS U:\> Enter-PSSession $session
[Exchange01]: PS> get-mailbox
[Exchange01]: PS> get-mailbox marius.davidsen

Name                      Alias                ServerName       ProhibitSendQuota                                                                                        
----                      -----                ----------       -----------------                                                                                        
Marius Davidsen           Marius.Davidsen      Exchange01       unlimited         

0

Однажды у меня была такая же проблема. Я думаю, что решение было следующим:

$s=new-pssession -computername xxxxx
import-pssession -session $s

затем добавьте оснастку и выполните команды

источник: http://forums.veeam.com/viewtopic.php?f=2&t=7514


Это дало бы мне неявно удаленный сеанс, а это не то, к чему я стремился. Мне бы очень хотелось, чтобы работало интерактивное удаленное взаимодействие. В целях устранения этой проблемы я попытался выполнить неявный удаленный сеанс, и он завершился неудачно другим способом. «Import-PSSession: выполнение команды Get-Command в удаленном сеансе сообщило о следующей ошибке: Исключение было вызвано целью вызова ..»
pk.


0

Я бы предложил использовать удаленную конечную точку, которая является частью обычной установки Exchange. Вы можете найти более подробную информацию здесь

Я успешно использовал его как в EX 2010, так и в EX 2013. Он поддерживается и соответствует правилам RBAC, поэтому я бы предложил использовать его вместо добавления Exchange snappin к «нормальной» конечной точке удаленного взаимодействия.


0

Проблема в том, что обе машины должны находиться в одном домене.

Также убедитесь, что вы используете учетную запись домена, а не локальную.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.