Ansible 正确使用 powershell 远程会话

Ansible 正确使用 powershell 远程会话

我正在尝试使用 ansible 在远程服务器上创建邮箱。出于测试目的,我将仅尝试使用“get-mailbox”来“获取邮箱列表”,而不是实际创建邮箱。

我尝试了很多命令组合,但我认为它们最终都归结于同一个问题,即 powershell 如何处理远程执行。

问题是,为了“获取邮箱”,我需要在 powershell 会话中加载某些“cmdlet”,这对于 ansible 和像我这样的没有经验的 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 = "[email protected]"
        $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 }}"

这甚至不会给我一个错误,因为最有可能的是等待某种我无法看到甚至无法从我的 ansible 主机记录(-vvvv)的用户输入。

我猜主要问题是:如何加载模块/管理单元并通过 ansible 执行远程 powershell cmdlet。在这种情况下,它将应用于创建 exchange 邮箱,但我希望相同的远程执行结构也适用于使用其他 powershell 管理单元/模块。

谢谢你!

答案1

要连接到远程 Exchange 服务器并进行管理,您可以按照以下步骤操作分号的解决方法,并检查会话问题是否已修复。

另外,你也可以参考官方文档“使用远程 PowerShell 连接到 Exchange 服务器“在电源外壳手动连接到远程 Exchange 服务器:

  1. 设置执行策略 RemoteSigned(跑步电源外壳以管理员身份
  2. $UserCredential = 获取凭据(输入您的管理员 UPN
  3. $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:///PowerShell/ -身份验证 Kerberos -Credential $UserCredential(更换服务器FQDN与你同在
  4. 导入 PSSession $Session -DisableNameChecking

在此处输入图片描述

或者自动地通过输入您的管理员 UPN密码服务器 FQDN在以下脚本中(测试.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

在此处输入图片描述

然后您可以使用命令“创建并查看您的邮箱”新邮箱“ 和 ”获取邮箱“:

在此处输入图片描述

在此处输入图片描述

希望以上的方法对大家有帮助哦!

答案2

最好的办法是查看 Ansible 的 Windows 远程管理 (WinRM) 指南中“限制”部分下列出的一些选项:https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html#limitations

具体来说:

大多数身份验证类型均未委派凭据,这会导致在访问网络资源或安装某些程序时出现身份验证错误。

解决方法:

设置ansible_winrm_transportcredsspkerberos(与 一起ansible_winrm_kerberos_delegation=true)可绕过双跳问题并访问网络资源

相关内容