Comunicação remota do PowerShell com Exchange 2010: o valor não pode ser nulo

8

Estou com dificuldades para executar os cmdlets do Exchange 2010 por meio de sessões remotas do PowerShell.

Inicio minha sessão local do PowerShell como administrador e emito os seguintes comandos -

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

Como você pode ver, nenhum dos cmdlets do Exchange está funcionando. Qual poderia ser o problema?

pk.
fonte
Apenas para verificar, o usuário que você está executando a sessão tem permissão para executar esses cmdlets? ou seja, você pode executá-los diretamente no servidor sem problemas?
Ben Pilbrow
Sim. Eles funcionam bem no servidor sob a mesma conta. Qualquer tipo de comunicação remota (comando de chamada ou interativo) falha.
pk.
Tente ImportSystemModulesquais carrega os módulos registrados no espaço de execução atual. Os cmdlets do Exchange não podem ser importados automaticamente para a sessão / área de execução remota.
Bernie White

Respostas:

2

Você está tentando se conectar ao ponto de extremidade de comunicação remota padrão no Exchange Server e adicionar os snap-ins ps a partir daí. Isto está errado. Substitua suas 3 primeiras linhas por:

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

Você não precisa entrar na sessão, importá-lo para a sessão local. A partir daqui, você pode usar os CmdLets específicos do Exchange localmente. Além disso, alguns dos tipos .Net do Exchange são instalados com o Console de Gerenciamento do Exchange, portanto, ele precisa ser instalado no computador local se você quiser fazer coisas com tamanhos de caixa de correio (o Exchange usa seus próprios tipos para objetos de tamanho)

Trondh
fonte
Este é o caminho certo, instale o EMC em seu gerenciamento ou estação de trabalho para os extras do PS. Dessa forma, o PS local tem acesso às ferramentas necessárias quando você se conecta. --- OU depois de concluir a instalação da EMC, use o Exchange Powershell instalado diretamente. Clique com o botão direito e execute-o como um usuário de gerenciamento, se necessário. Eu uso isso o tempo todo.
Mark
1

Você pode fazer assim, com import-pssesion e especificando o connectionURI & 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             

Isso requer que você permita a porta TCP 80 no seu firewall.

Usando essa sessão, você também pode inseri-la como desejar:

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         
mdavidsen
fonte
0

Eu tive o mesmo problema uma vez. Eu acho que a solução foi esta:

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

adicione seu snap-in e execute seus comandos

fonte: http://forums.veeam.com/viewtopic.php?f=2&t=7514

Northben
fonte
Isso me daria uma sessão implicitamente remota, que não era para isso que eu estava indo. Eu realmente gostaria que o controle remoto interativo funcionasse. Para solucionar esse problema, tentei uma sessão remota implícita e ela falhou de maneira diferente. "Import-PSSession: executando o comando Get-Command na sessão remota relatou o seguinte erro: A exceção foi lançada pelo destino de uma invocação .."
pk.
0

Você tentou instalar as Ferramentas de Gerenciamento do Exchange a partir do DVD e configurar sua estação de trabalho?

Sunny Chakraborty
fonte
0

Eu sugeriria o uso de ponto de extremidade remoto que faz parte da instalação normal do Exchange. Você pode encontrar mais detalhes aqui

Usei-o com sucesso tanto no EX 2010 quanto no EX 2013. Ele é suportado e segue as regras do RBAC, portanto, sugiro usá-lo em vez de adicionar o snappin do Exchange ao ponto de extremidade de comunicação remota "normal".

BartekB
fonte
0

O problema é que ambas as máquinas devem estar no mesmo domínio.

Além disso, certifique-se de usar a conta do domínio, não a local.

Vanuan
fonte