PowerShell 使用其他凭据远程调用 Exchange

PowerShell 使用其他凭据远程调用 Exchange

我的任务是创建一个脚本,该脚本将在整个网络的多个用户计算机上运行。我们最终要运行的命令将根据用户的选择将用户的电子邮件别名更改为其他名称。对此,我没有任何异议。我的问题是,用户需要访问 Exchange 命令,并且拥有一个有权使用它的帐户。

我在希望存储凭据的服务器上使用以下命令以 XML 格式保护了服务帐户密码:

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

然后在脚本中,我使用以下内容导入该信息:

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

据我所知,该部分运行良好。

然后,我尝试导入 Microsoft Exchange 2010 模块,然后运行我前面提到的命令。我写了这一小部分,但遇到了奇怪的错误。以下是我编写的代码:

$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

我尝试测试该部分,但收到 WinRM 错误消息,但据我所知,WinRM 在我的 Exchange 服务器上运行良好。错误如下:

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

当我调出并导入该服务器时,是否需要该服务器的完全限定名称?我尝试按照 TechNet 文章进行操作,并了解到了这一点,但我无法导入该模块。

编辑:我现在可以导入模块,但在附加凭据时遇到了问题。如果我不嵌入凭据,而是手动导入凭据,我可以使用以下命令导入模块:

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

答案1

不久前遇到过类似的问题 - 这是远程主机上的一个简单权限问题。我不再确定,但我认为我使用了以下小指南:http://blogs.msdn.com/b/powershell/archive/2009/11/23/you-don-t-have-to-be-an-administrator-to-run-remote-powershell-commands.aspx

我还建议将所有内容打包到一个可执行文件中(使用 PS2EXE -https://gallery.technet.microsoft.com/PS2EXE-Convert-PowerShell-9e4e07f1)。这样,您就可以破解脚本中硬编码的凭据,避免丢失 xml 文件,并将其提供给您的用户,而不必再担心它。

答案2

所以我犯了多个错误。感谢所有回复的人,这确实让我走上了正确的道路。

我必须删除我一个命令末尾的 -Credential $session 标志。它无法正确解析,并且凭据已从上述命令解析到窗口中。我在“-ConnectionUri”前面还有一个前导空格,这导致了问题。

最终代码如下:

$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

相关内容