Назад | Перейти на главную страницу

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 

Так что у меня было несколько ошибок. Спасибо всем, кто ответил, это действительно привело меня на правильный путь.

Мне пришлось удалить флаг -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

Некоторое время назад была аналогичная проблема - это была простая проблема с разрешением на удаленном хосте. Я больше не уверен, но думаю, что использовал это небольшое руководство: 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-файла и передать его своим пользователям, не беспокоясь об этом больше.