PowerShell Remoting con Exchange 2010: el valor no puede ser nulo

8

Tengo dificultades para ejecutar cmdlets de Exchange 2010 a través de sesiones remotas de PowerShell.

Comienzo mi sesión local de PowerShell como administrador y emito los siguientes 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 puede ver, ninguno de los cmdlets de Exchange está funcionando. ¿Cual podría ser el problema?

pk.
fuente
Solo para verificar, ¿el usuario con el que está ejecutando la sesión tiene permiso para ejecutar estos cmdlets? es decir, ¿puedes ejecutarlos directamente en el servidor sin problemas?
Ben Pilbrow
Sip. Funcionan bien en el servidor con la misma cuenta. Cualquier tipo de comunicación remota (invoke-command o interactive) falla.
pk.
Pruebe ImportSystemModulesqué carga los módulos registrados en el espacio de ejecución actual. Los cmdlets de Exchange no pueden importarse automáticamente a la sesión remota / espacio de ejecución.
Bernie White el

Respuestas:

2

Está intentando conectarse al punto final remoto predeterminado en el servidor de Exchange y agregar los complementos ps desde allí. Esto está mal. Reemplace sus primeras 3 líneas con esto:

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

No tiene que ingresar a la sesión, en su lugar, impórtela a la sesión local. A partir de aquí, puede usar los CmdLets específicos de Exchange localmente. Además, algunos de los tipos .Net de Exchange se instalan con la Consola de administración de Exchange, por lo que debe instalarse en su computadora local si desea hacer cosas con tamaños de buzón (Exchange usa sus propios tipos para objetos de tamaño)

Trondh
fuente
Este es el camino correcto, instale el EMC en su estación de trabajo o administración para los extras de PS. De esa manera, el PS local tiene acceso a las herramientas que necesita cuando se conecta. --- O una vez que haya realizado la instalación de EMC, use Exchange Powershell que se instala directamente. Haga clic derecho y ejecútelo como usuario de administración si es necesario. Lo uso todo el tiempo.
Mark
1

Puede hacerlo así, con import-pssesion y especificando la conexiónURI y 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             

Esto requiere que permita el puerto TCP 80 en su firewall.

Usando esa sesión, también puedes ingresarla como quisieras:

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
fuente
0

Tuve el mismo problema una vez. Creo que la solución fue esta:

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

luego agregue su complemento y ejecute sus comandos

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

Northben
fuente
Esto me daría una sesión implícitamente remota que no es lo que estaba buscando. Realmente me gustaría que funcione la comunicación remota interactiva. Para solucionar este problema, probé una sesión remota implícita y falló de una manera diferente. "Import-PSSession: al ejecutar el comando Get-Command en una sesión remota se informó el siguiente error: el destino de una invocación ha lanzado una excepción ..."
pk.
0

¿Intentó instalar las herramientas de administración de Exchange desde el DVD y configurar su estación de trabajo?

Sunny Chakraborty
fuente
0

Sugeriría usar un punto final remoto que sea parte de la instalación normal de intercambio. Puedes encontrar más detalles aquí

Lo he usado con éxito tanto con EX 2010 como con EX 2013. Es compatible y sigue las reglas RBAC, por lo que sugeriría usarlo en lugar de agregar el snappin de Exchange al punto final remoto "normal".

BartekB
fuente
0

El problema es que ambas máquinas deben estar en el mismo dominio.

También asegúrese de usar la cuenta de dominio, no la local.

Vanuan
fuente