PowerShell para invocar remotamente o Exchange com outras credenciais

2

Recebi a tarefa de criar um script que será executado em várias máquinas de usuários em toda a rede. Os comandos que vamos executar irão mudar o alias de email do usuário para algo baseado em uma escolha. Isso, eu não tenho problema com isso. Meu problema é o fato de que o usuário precisa acessar os comandos do Exchange e uma conta com os direitos para usá-lo.

Eu assegurei uma senha de conta de serviço em um XML com o seguinte comando no servidor em que eu queria que as credenciais residissem:

$MyCredentials=Get-Credentials -Credential "domain\username" | Export-CliXml C:\Scripts\SecureCredentials.xml

Em seguida, no script, importei essa informação com o seguinte:

$cred=Import-CLIXML \server\Scripts\SecureCredentials.xml

Essa parte está funcionando bem, até onde eu sei.

Eu, então, estou tentando importar o módulo do Microsoft Exchange 2010 para executar os comandos que mencionei anteriormente. Eu escrevi essa pequena porção e estou recebendo erros estranhos. Aqui está o que eu codifiquei:

$Session = New-PSsession -ComputerName exchangeserver
  Invoke-Command -Command {Import-Module Microsoft.Exchange.Management.PowerShell.2010} -Session $Session 
  Import-PSSession -Session $Session -Module Microsoft.Exchange.Management.Powershell.2010 -Prefix RM

Eu tento testar essa parte e recebo uma mensagem de erro do WinRM, mas, até onde eu sei, o WinRM está funcionando bem no meu servidor Exchange. Aqui está o erro:

New-PSsession : [exchangeserver] Connecting to remote server exchangeserver failed with the following error message : The client
cannot connect to the destination specified in the request. Verify that the service on the destination is running and
is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination,
most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to
analyze and configure the WinRM service: "winrm quickconfig". For more information, see the
about_Remote_Troubleshooting Help topic.
At C:\users\me\documents\Powershell Scripts\ExchangeBranding.ps1:17 char:14
+   $Session = New-PSsession -ComputerName exchangeserver
+              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : OpenError:         (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotin
   gTransportException
+ FullyQualifiedErrorId : CannotConnect,PSSessionOpenFailed
Invoke-Command : Cannot validate argument on parameter 'Session'. The argument is null or empty. Provide an argument
that is not null or empty, and then try the command again.
At C:\users\me\documents\Powershell Scripts\ExchangeBranding.ps1:18 char:98
+ ... 2010} -Session $Session
+                    ~~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Invoke-Command], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand

Import-PSSession : Cannot validate argument on parameter 'Session'. The      argument is null. Provide a valid value for
the argument, and then try running the command again.
At C:\users\me\documents\Powershell Scripts\ExchangeBranding.ps1:19 char:29
+   Import-PSSession -Session $Session -Module Microsoft.Exchange.Management.Power ...
+                             ~~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Import-PSSession], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.ImportPSSessionCommand

Preciso do nome totalmente qualificado do servidor quando o clico para importá-lo? Eu estava tentando acompanhar em um artigo do TechNet e isso me levou até aqui, mas não consigo importar o módulo.

EDIT: agora posso importar o módulo, mas estou com problemas para anexar as credenciais. Se eu fizer isso sem incorporar as credenciais e apenas importá-las manualmente, posso fazer com que o módulo seja importado com o seguinte:

$session=New-PSSession -ConfigurationName Microsoft.Exchange.Management.Powershell.2010 -ConnectionUri http://exchangeserver.domain.com/powershell 
    
por Dave H. 11.08.2015 / 17:01

2 respostas

1

Então eu tive várias coisas erradas. Obrigado por todos que responderam, isso realmente me levou para o caminho certo.

Eu tive que remover o sinalizador de sessão do $ -redredo no final do meu comando. Não estava analisando corretamente e as credenciais já foram analisadas na janela do comando acima. Eu também tinha um espaço de liderança na frente de "-ConnectionUri", que estava causando ataques.

O código final é o seguinte:

$cred=Import-CLIXML \server\Scripts\SecureCredentials.xml

$session=New-PSSession -ConfigurationName Microsoft.Exchange.Management.Powershell.2010 -ConnectionUri http://server.domain.com/powershell

Import-PSSession $session
    
por 11.08.2015 / 20:00
1

Tive um problema semelhante há algum tempo - era um problema de permissão simples no host remoto. Não tenho mais certeza, mas acho que usei este pequeno guia: link

Além disso, sugiro que você empacote tudo em um arquivo executável (com o link PS2EXE - ). Com isso, você pode invadir as credenciais codificadas em seu script e evitar um arquivo xml ausente e fornecê-lo aos seus usuários sem ter que se preocupar mais com isso.

    
por 11.08.2015 / 17:47