正确删除Hyper-V Server 2012 R2上的windows.old

我已经在装有Hyper-V Server 2012的服务器上安装了Hyper-V Server 2012 R2。当我这样做时,创build了标准的Windows.old文件夹。 我现在想要安全地删除该文件夹。 使用完整的GUI来完成这项工作的标准方法是使用磁盘清理,但当然在Hyper-V服务器上我没有这个选项。

在这种情况下是否有正式的方法来删除该文件夹? 我知道如果这是服务器核心,我可以安装完整的graphics用户界面,包括桌面体验,但这将是很多胡说,只是干净地删除一个文件夹。

我问的主要原因,而不是仅仅做rmdir /s或者其他一些,就是Windows.old文件夹有很多的连接点,我不想在生产操作系统副本中破坏任何东西,作为这样做的一部分。

我首先尝试复制并运行cleanmgr.exe(磁盘清理工具),但它对Core / Hyper-V服务器中不存在的DLL依赖性过多。

所以相反,我手动删除目录。

首先,我删除了所有的交汇点和符号链接。 为此,我使用SysInternals中的junction.exe 。 将exe复制到path中的一个目录中。 我跑它得到所有路口的名单:

 c:\tools\junction.exe -s -q C:\windows.old > %temp%\junc.txt 

我打开了PowerShell:

 start powershell.exe 

并运行以下脚本来查找相关行并再次执行junction.exe:

  foreach ($line in [System.IO.File]::ReadLines("$env:temp\junc.txt")) { if ($line -match "^\\\\") { $file = $line -replace "(: JUNCTION)|(: SYMBOLIC LINK)","" & c:\tools\junction.exe -d "$file" } } 

这删除了我的系统上的所有连接点和单个符号链接。

回到cmd.exe我现在执行了三个命令来清除权限并删除所有文件:

  takeown /FC:\windows.old /R /DY cacls C:\windows.old /T /G Everyone:F rd /s /q C:\windows.old 

在我的testing中,我安装了一个新的Hyper-V服务器2012,然后升级到2012 R2,Windows.old现在不见了,系统运行良好,所有旧的联结目标都完好无损。

我使用Peter H的回答,并确认它可以工作,但是我需要在多台服务器上执行此操作,所以我将其代码修改为一个可以在本地或通过另一台机器上的PS远程执行的powershell脚本。 这是.ps1文件:

 # Script to remove windows.old after an upgrade # Assumes path to sysinternals is in the PATH env variable $ErrorActionPreference = "Inquire" junction.exe -accepteula -s -q C:\windows.old | out-file $env:temp\juncts.txt -force foreach ($line in [System.IO.File]::ReadLines("$env:temp\juncts.txt")) { if ($line -match "^\\\\") { $file = $line -replace "(: JUNCTION)|(: SYMBOLIC LINK)","" & junction.exe -d "$file" } } takeown /FC:\windows.old /R /DY echo y | cacls C:\windows.old /T /G Everyone:F rm C:\windows.old -recurse -force rm "$env:temp\juncts.txt" -force 

线:

 echo y | cacls C:\windows.old /T /G Everyone:F 

应该:

 echo y| cacls C:\windows.old /T /G Everyone:F 

y|之间没有空格