我正在尝试使用 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 服务器:
- 设置执行策略 RemoteSigned(跑步电源外壳以管理员身份
- $UserCredential = 获取凭据(输入您的管理员 UPN)
- $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http:///PowerShell/ -身份验证 Kerberos -Credential $UserCredential(更换服务器FQDN与你同在
- 导入 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_transport
为credssp
或kerberos
(与 一起ansible_winrm_kerberos_delegation=true
)可绕过双跳问题并访问网络资源