我有一部与之作战的剧本(请参见下文摘录)。我正在将Windows Server 2016盒升级为域控制器,并且它具有冗长的重启过程。尽管我可以将post_reboot_delay设置得很高,但我还是非常希望有一个智能的test_command,它等待“应用计算机设置”完成,然后才能继续执行并在我的下一个任务中出错(运行添加一些广告对象的脚本) 。当我的计算机实际完成设置设置时,是否有人可以使用test_command?我也会接受一个有效的win_wait _。
---
- hosts: landlord_ad01
vars:
ad_domain: experimental.loc
ad_safemode: 1qaz@WSX1qaz@WSX
TreeADName: experimental
# Cut
- name: Promote Domain Controller Primary (takes about six minutes)
win_domain:
dns_domain_name: "{{ ad_domain }}"
safe_mode_password: "{{ ad_safemode }}"
register: promote_dc
- name: Reboot Server for Domain Controller Promotion (takes about six minutes)
win_reboot:
post_reboot_delay: 300
# Cut
- name: Run AD_Objects Script
win_shell:
'C:\Temp\adobjects.ps1 -TreeADName {{ TreeADName }}'
我尝试过test_command: powershell.exe if($($env:userdomain) -like '{{ TreeADName }}'){exit 0} else{exit 1}
,但是出现错误powershell.exe : The command parameter was already specified.
。这可能是由于else语句之前的空格所致。
我也尝试过test_command: powershell.exe if($env:userdomain -notlike '{{ TreeADName }}'){exit 1}
,但这得到了Missing '(' after 'if' in if statement
。我不确定为什么看不到括号。
我尝试用字符串将powershell命令包装在test_command中的任何结果都会导致从替换的{{ TreeADName }}
变量周围删除字符串,即使我在其上使用了jinja引号过滤器也是如此。这会使PowerShell抱怨已解析的TreeADName不是Commandlet。 Ansible似乎正在对该命令执行有趣的操作。我已经使用win_command模块测试了大约二十种变体,以查看哪种方法有效,并且在与win_reboot一起使用时,它们都会由于一种或多种原因而失败。
非常感谢您的帮助。