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

Ansible для правильного использования удаленных сеансов PowerShell

Я пытаюсь использовать ansible для создания почтового ящика на удаленном сервере. В целях тестирования я только попытаюсь «получить список почтовых ящиков» с помощью «get-mailbox» вместо того, чтобы фактически создавать почтовый ящик.

Я пробовал множество комбинаций команд, но я думаю, что все заканчивается одной и той же проблемой, касающейся того, как powershell обрабатывает удаленные исключения.

Проблема в том, что для того, чтобы «получить почтовый ящик», мне нужно загрузить определенные «командлеты» в сеансе PowerShell, что, по-видимому, трудно сделать с доступным доступом и для неопытных пользователей PowerShell, таких как я.

Это моя последняя попытка, в которой для подключения используется плагин "psrp" вместо WinRM. Я не привержен этой идее, она просто отражает мою последнюю попытку.

- name: prueba psrp
  hosts: servidor_exchange

  tasks:
    - win_shell: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -version 2.0 -NonInteractive -command ". 'C:\Program Files\Microsoft\ExchangeServer\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto ; get-mailbox"
  connection: psrp
  register: variable

- debug: 
    msg: "{{ variable }}"

Сообщение об ошибке слишком подробное, чтобы помещать его в описание вопроса, поэтому вы можете увидеть его здесь https://pastebin.com/4E0vRmpX вместо.

Вот еще один подход, в котором я пытаюсь настроить pssession вручную.

- name: prueba psrp
  hosts: servidor_exchange

  tasks:
    - win_shell: |
        $username = "administrator@essi.ansible"
        $password = ConvertTo-SecureString "Redhat01." -AsPlainText -Force
        $psCred = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password)
        $sessionOption = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
        Import-Module C:\PROGRA~1\Microsoft\EXCHAN~1\V14\Bin\RemoteExchange.ps1
        Import-Module C:\PROGRA~1\Microsoft\EXCHAN~1\V14\Bin\ConnectFunctions.ps1
        Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
        $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ansible-ex/powershell/ -Credential $psCred -Authentication Kerberos -AllowRedirection -SessionOption $sessionOption
#        Connect-ExchangeServer -auto
#        Get-Mailbox
      register: variable

    - debug: 
        msg: "{{ variable }}"

Это даже не приведет к ошибке, так как, скорее всего, я ожидаю какого-либо пользовательского ввода, который я не вижу или даже не регистрирую (-vvvv) с моего доступного хоста.

Думаю, основная проблема заключается в следующем: как загружать модули / оснастки и выполнять удаленные командлеты PowerShell через ansible. В этом случае он будет применяться для создания почтового ящика обмена, но я надеюсь, что такая же структура для удаленного выполнения будет работать, возможно, также с использованием других оснасток / модулей PowerShell.

Спасибо!

Лучше всего просмотреть некоторые параметры, указанные в разделе «Ограничения» руководства Ansible по удаленному управлению Windows (WinRM): https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html#limitations

В частности:

Учетные данные не делегируются для большинства типов аутентификации, что вызывает ошибки аутентификации при доступе к сетевым ресурсам или установке определенных программ.

И обходной путь:

Устанавливать ansible_winrm_transport к credssp или kerberos (с участием ansible_winrm_kerberos_delegation=true), чтобы обойти проблему двойного перехода и получить доступ к сетевым ресурсам

Чтобы подключиться к удаленному серверу Exchange и управлять им, вы можете следовать Точка с запятойОбходной путь и проверьте, устранена ли проблема сеанса после этого.

Кроме того, вы также можете обратиться к официальному документу "Подключение к серверам Exchange с помощью удаленной оболочки PowerShell"для выполнения следующих команд в Power Shell для подключения к удаленному серверу Exchange вручную:

  1. Set-ExecutionPolicy RemoteSigned(Бегать Power Shell как администратор)
  2. $ UserCredential = Get-Credential(Введите свой Администратор UPN)
  3. $ Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http: /// PowerShell / -Authentication Kerberos -Credential $ UserCredential(Заменить ServerFQDN с твоей)
  4. Импорт-PSSession $ Session -DisableNameChecking

Или автоматически подключитесь к вашему серверу, введя свой Администратор UPN, пароль и Полное доменное имя сервера в следующем скрипте (Test.ps1):

$username = "<Your Admin UPN>"
$password = ConvertTo-SecureString "<You Admin Password>" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<Your server FQDN>/PowerShell/ -Authentication Kerberos -Credential $psCred
Import-PSSession $Session -AllowClobber -DisableNameChecking

Затем вы можете создать и просмотреть свой почтовый ящик с помощью команд "Новый почтовый ящик" и "Get-Mailbox":

Надеюсь, описанные выше методы будут вам полезны!