$ErrorActionPreference = "stop" function reallyDelete($d) { function renameToNumbersRecursive($dir) { $i = 0 foreach($f in (dir $dir)) { while(Test-Path ($dir + "\" + $i)) { $i++ } try { Rename-Item $f.FullName ($dir + "\" + $i) } catch { takeown /f $dir | Out-Null icacls $dir /reset | Out-Null takeown /f $f.FullName | Out-Null icacls $f.FullName /reset | Out-Null Rename-Item $f.FullName ($dir + "\" + $i) } } foreach($f in (dir $dir)) { if($f -is [System.IO.DirectoryInfo]) { renameToNumbersRecursive($f.FullName) } } } # paths might become too long for icacls, so rename paths to short numbers renameToNumbersRecursive $d takeown /f $d /r | Out-Null icacls $d /reset /T | Out-Null attrib -s -h -r "$d\*.*" /s /d | Out-Null cmd /c del /s /q $d | Out-Null cmd /c rmdir /s /q $d | Out-Null } reallyDelete "C:\ProgramData\Docker"
Wednesday, November 22, 2017
Delete the undeletable on Windows
I had trouble deleting C:\ProgramData\Docker on Docker for Windows using Windows containers. This is because it contains a full Windows directory layout, with all system files and special permissions and flags. Here's a Powershell snippet to get a file hierarchy on Windows into a state where it can be deleted.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment