我正在尝试编写一个Ansible任务,该任务执行Powershell命令来检索Windows 7 Remote计算机上C驱动器的磁盘可用空间,然后将其输出到printscreen。我未能提取必要的信息。
[我尝试通过rawcsize的元素将rawcsize.stdout [0]替换为rawcsize.stdout [1]或rawcsize.stdout [2]
剧本的编写方法如下:
- name: Retrieve Disk Usage
win_shell: 'Get-PSDrive C | Select-Object Free'
register: rawcsize
# # Convert disk size in Gigabytes
- name: Convert system disk into various formats and export
vars:
disk_out_free: '{{ rawcsize.stdout[0] }}'
disk_int: '{{ rawcsize.stdout | int }}'
disk_gb: '{{ disk_int | int}}'
debug:
msg: 'rawcsize.stdout: {{(rawcsize.stdout)}} disk_out_free: {{(disk_out_free)}} disk_int: {{(disk_int)}} disk_gb: {{(disk_gb)}}'
确定:[192.168.122.3] => {}
MSG:
rawcsize.stdout:自由----35229712384
disk_int:0 disk_gb:0
因此变量“ disk_out_free”不可见。为什么会这样呢?以及如何从Powershell输出中仅提取必要的信息?谢谢
使用ConvertTo-Json
cmdlet,可以从PowerShell中输出json,然后使用from_json
Jinja2过滤器将其读入。
- name: get disk free space
win_shell: Get-PsDrive c | ConvertTo-Json
register: output
- name: extract free space
set_fact:
free_json: "{{ output.stdout|from_json}}"
- name:
debug:
var: free_json.Free
产品:
TASK [Gathering Facts] **************************************************************************************
ok: [host.example.com]
TASK [get disk free space] **************************************************************************************
changed: [host.example.com]
TASK [extract free space] **************************************************************************************
ok: [host.example.com]
TASK [debug] **************************************************************************************
ok: [host.example.com] => {
"free_json.Free": "18444869632"
}
PLAY RECAP *************************************************************************************
host.example.com : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0