我有一个PowerShell脚本的返回值数组,我只想在数组中的所有项都为0时执行一个命令。有是这样的:检查一个列表是否只包含Ansible中的值等于0
- name: check if computer is running DC services
raw: Get-Service -name {{item}}
with_items:
- "adws"
- "kdc"
- "netlogon"
register: services
# ignore_errors: yes
failed_when: services.stderr and 'Cannot find any service with service name ' not in services.stderr
changed_when: False
- name: debug services
debug:
var=services
- name: copy check_ad.exe to DCs
win_copy: src=check_ad.exe dest='{{nagios_client_install_path}}\\check_ad.exe'
tags: ['win-nagios-client']
when: item.rc == 0
,但是这将运行copy check_ad.exe
如果任何服务正在运行。我如何才能将其更改为只在全部服务正在运行时才运行?
调试信息是在这里:
ok: [server_name] => {
"changed": false,
"services": {
"changed": false,
"msg": "All items completed",
"results": [
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"failed": false,
"failed_when_result": false,
"item": "adws",
"rc": 1,
"stderr": "Get-Service : Cannot find any service with service name 'adws'.\r\nAt line:1 char:1\r\n+ Get-Service -name adws\r\n+ ~~~~~~~~~~~~~~~~~~~~~~\r\n + CategoryInfo : ObjectNotFound: (adws:String) [Get-Service], Ser \r\n viceCommandException\r\n + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell. \r\n Commands.GetServiceCommand\r\n \r\n\r\n",
"stdout": "",
"stdout_lines": []
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"failed": false,
"failed_when_result": false,
"item": "kdc",
"rc": 1,
"stderr": "Get-Service : Cannot find any service with service name 'kdc'.\r\nAt line:1 char:1\r\n+ Get-Service -name kdc\r\n+ ~~~~~~~~~~~~~~~~~~~~~\r\n + CategoryInfo : ObjectNotFound: (kdc:String) [Get-Service], Serv \r\n iceCommandException\r\n + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell. \r\n Commands.GetServiceCommand\r\n \r\n\r\n",
"stdout": "",
"stdout_lines": []
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"changed": false,
"failed": false,
"failed_when_result": false,
"item": "netlogon",
"rc": 0,
"stderr": "",
"stdout": "\r\nStatus Name DisplayName \r\n------ ---- ----------- \r\nRunning Netlogon netlogon \r\n\r\n\r\n",
"stdout_lines": [
"",
"Status Name DisplayName ",
"------ ---- ----------- ",
"Running Netlogon netlogon ",
"",
""
]
}
]
}
}
“*这将运行”复制check_ad.exe“如果任何服务正在运行*” - 是否真的吗?恕我直言,它应该在上一个任务中产生语法错误。 – techraf
@techraf - 你看到什么语法问题?我跑了很多次没有问题(除了我提到的它没有执行预期的动作) – ebarrere
复制check_ad.exe到DCs任务没有循环,所以'item'是未定义的并且引用'item.rc '有条件的应该会失败。 – techraf