首页 > 解决方案 > win_find 失败!=> {"msg": "'dict object' 没有属性 'files'"}

问题描述

我正在尝试使用“路径”变量运行 win_find 以查找临时文件(例如 c:\users\public\appdata\local\temp),但是当我将它传递给调试时,我收到错误消息

"FAILED! => {"msg": "'dict object' has no attribute 'files'"}"

我曾尝试交换“register”和“with_items”行,但这似乎根本没有区别。

- hosts: windows-02
  vars:
    dir: \AppData\Local\Temp\
  tasks:
  - name: find user directories
    win_find:
      paths: c:\users
      recurce: yes
      file_type: directory
      get_checksum: no
    register: user_dir

  - name: debug 1
    debug:
      msg: "{{ item.path + dir }}"
    loop: "{{ user_dir.files }}"

  - name: find temp files
    win_find:
      paths: "{{ item.path + dir }}"
      recurce: yes
      hidden: yes
      get_checksum: no
    register: files_to_delete
    with_items: "{{ user_dir.files }}"

  - name: debug
    debug:
      msg: "{{ item }}"
    loop: "{{ files_to_delete.files }}"

  - name: remove
    win_file:
      path: "{{ item.path }}"
      state: absent
    with_items: "{{ files_to_delete.files }}"

我希望得到一个要删除的文件列表,这些文件将传递给“win_files”模块。相反,我收到了错误消息

"FAILED! => {"msg": "'dict object' has no attribute 'files'"}"

标签: ansible

解决方案


win_find 模块中有一个错字,它是递归的:是 请找到下面对我有用的代码

---
 - name: Find files 
   win_find:
    paths: "{{paths}}"
    age: "{{duration}}"
   register: log_files

 - name: Delete the files 
   win_file:
    path: "{{item.path}}"
    state: absent
   with_items: "{{log_files.files}}"

而且 files_to_delete 不会有 files_to_delete.files 因为它在循环中。它将有 files_to_delete.results


推荐阅读