【问题标题】:How to delete contents in Recycle Bin using Ansible如何使用 Ansible 删除回收站中的内容
【发布时间】:2019-03-22 21:12:32
【问题描述】:

我正在针对 Windows VM 运行剧本以删除回收站的内容,并且该任务成功运行,表明已进行了更改。 但是,在服务器本身上查看时,回收站的内容仍然存在。

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

使用了不同的 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 时,回收站的内容仍然存在。

【问题讨论】:

  • 您在 ansible 连接中验证的用户是什么?该用户在服务器上是否具有必要的权限?
  • 是的,用户是服务器上的本地管理员。我还以用户身份登录服务器,并能够成功运行命令。
  • 您可能忘记注册输出了。

标签: powershell recycle-bin ansible-awx


【解决方案1】:

所以我意识到运行 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 }}"

【讨论】:

  • 很好奇为什么不直接删除 PowerShell 中 win_shell sn-p 中的内容并避免再次往返?
  • 我这样做是为了测试以了解如何获得磁盘驱动器,但我继续将两者结合起来
  • 你能分享一下最终的解决方案吗?我很难将两者结合起来。我对 ansible 也很陌生。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多