通过Powershell和Ansible 2.4评估Windows机器中的可用磁盘空间



>我正在尝试编写一个 Ansible 任务,该任务执行 Powershell 命令以检索 Windows 7 Remote 机器上 C 驱动器的磁盘可用空间,然后执行简单的输出到打印屏幕。我未能提取必要的信息。

我试图通过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-Jsoncmdlet,可以从 PowerShell 输出 json,然后使用from_jsonJinja2 筛选器读取它。

- 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

最新更新