如何使用 Ansible 删除回收站中的内容

How to delete contents in Recycle Bin using Ansible

我正在 运行针对 Windows 虚拟机编写剧本,以删除回收站的内容和 运行 成功表明已进行更改的任务。 但是,在服务器本身上查看时,回收站中的内容仍然存在。

有几种方法可以删除回收站中的内容。 以下是我尝试过的以下方法:

使用的不同 Ansible 剧本:

- name: Clean recycle bin
  win_shell: |
    $recycleBin = (New-Object -ComObject Shell.Application).NameSpace(0xa)
    $recycleBin.Items() | ForEach-Object -Process { Remove-Item -Path $_.Path -Force -Recurse }

- name: Clean recycle bin
  win_shell: Clear-RecycleBin -Force

- name: Clean recycle bin
  win_command: cmd.exe /k rd /s /q %systemdrive%$Recycle.Bin

使用powershell 命令,它会在不提示我确认的情况下删除所有内容。 我不希望 运行 cmd.exe 命令,因为它只删除属于 C:\ 驱动器的内容,除非我指定驱动器号。

当服务器本身 运行 时,所有这些命令都成功删除了回收站的内容,但是当使用 Ansible 时,回收站的内容仍然存在。

所以我意识到 运行使用 powershell 命令只会删除该特定用户的回收站内容,而不是所有用户。

我决定使用 powershell 命令收集驱动器号,因为我没有使用 win_disks_facts 获取所有驱动器号。然后我将遍历驱动器号和 运行 cmd.exe 命令,该命令为所有用户清理回收站。

- name: Get disk drives
  win_shell: |
    $driveinfo = Get-WmiObject -Class Win32_logicaldisk | where {$_.drivetype -eq 3} | select DeviceID
    $driveinfo.DeviceID
- name: Clean recycle bin
  win_command: cmd.exe /k rd /s /q {{ item }}$Recycle.Bin
  with_items:
    - "{{ disk_drives.stdout_lines }}"