mwrock / packer-templates

Templates for creating vagrant boxes
Other
536 stars 250 forks source link

Remove-Item can not remove non empty directories #55

Open spuder opened 8 years ago

spuder commented 8 years ago

The clean-winsxs step will attempt to remove directories and logs

@(
    "$env:localappdata\Nuget",
    "$env:localappdata\temp\*",
    "$env:windir\logs",
    "$env:windir\panther",
    "$env:windir\temp\*",
    "$env:windir\winsxs\manifestcache"
) | % {
        if(Test-Path $_) {
            Write-Host "Removing $_"
            try {
              Takeown /d Y /R /f $_
              Icacls $_ /GRANT:r administrators:F /T /c /q  2>&1 | Out-Null
              Remove-Item $_ -Recurse -Force | Out-Null 
            } catch { $global:error.RemoveAt(0) }
        }
    }

I find that many of the directories fail to be emptied because of these errors:

Remove-Item : Cannot remove item C:\Windows\logs\CBS: The directory is not empty.
 vmware-iso: SUCCESS: The file (or folder): "C:\Windows\winsxs\manifestcache\b3507e8d4a1eae00_blobs.bin" now owned by user "VAGRANT-3JOB2HR\vagrant".
    vmware-iso: +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    vmware-iso: + CategoryInfo          : WriteError: (CBS.log:FileInfo) [Remove-Item], IO
    vmware-iso: Exception
    vmware-iso: + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell
    vmware-iso: .Commands.RemoveItemCommand
    vmware-iso: Remove-Item : Cannot remove item C:\Windows\logs\CBS: The directory is not
    vmware-iso: empty.
    vmware-iso: At C:\Windows\Temp\script.ps1:21 char:15
    vmware-iso: +               Remove-Item $_ -Recurse -Force | Out-Null
    vmware-iso: +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    vmware-iso: + CategoryInfo          : WriteError: (CBS:DirectoryInfo) [Remove-Item], I
    vmware-iso: OException
    vmware-iso: + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell
    vmware-iso: .Commands.RemoveItemCommand
    vmware-iso: Remove-Item : Cannot remove item C:\Windows\logs: The directory is not empty.
    vmware-iso: At C:\Windows\Temp\script.ps1:21 char:15
    vmware-iso: +               Remove-Item $_ -Recurse -Force | Out-Null
    vmware-iso: +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    vmware-iso: + CategoryInfo          : WriteError: (C:\Windows\logs:DirectoryInfo) [Rem
    vmware-iso: ove-Item], IOException
    vmware-iso: + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell
    vmware-iso: .Commands.RemoveItemCommand
    vmware-iso: Remove-Item : Cannot remove item C:\Windows\winsxs\manifestcache: The
    vmware-iso: directory is not empty.
    vmware-iso: At C:\Windows\Temp\script.ps1:21 char:15
    vmware-iso: +               Remove-Item $_ -Recurse -Force | Out-Null
    vmware-iso: +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    vmware-iso: + CategoryInfo          : WriteError: (C:\Windows\winsxs\manifestcache:Dir
    vmware-iso: ectoryInfo) [Remove-Item], IOException
    vmware-iso: + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell
    vmware-iso: .Commands.RemoveItemCommand

I suspect that this is because of the known problems with Remove-Item -Recurse discussed in this stack overflow

http://serverfault.com/a/199994/169180