Remover corretamente o windows.old no Hyper-V Server 2012 R2

19

Instalei o Hyper-V Server 2012 R2 em um servidor que tinha o Hyper-V Server 2012. Quando fiz isso, a pasta Windows.old padrão foi criada. Agora gostaria de remover essa pasta com segurança. A maneira padrão de fazer isso com uma GUI completa seria usar a Limpeza de Disco, mas é claro que eu não tenho essa opção no Servidor Hyper-V.

Existe uma maneira formal de remover essa pasta nesse cenário? Eu sei que se isso fosse Server Core eu poderia instalar o GUI completo, incluindo Desktop Experience, mas isso seria um monte de bobagem apenas para remover uma pasta de forma limpa.

Meu principal motivo para perguntar, ao invés de apenas rmdir /s ou algo assim, é que a pasta Windows.old tem muitas junções, e eu não quero quebrar nada na cópia do SO de produção como parte de fazer isso.

    
por MikeBaz - MSFT 12.10.2013 / 15:17

2 respostas

21

Primeiro tentei copiar e executar o cleanmgr.exe (ferramenta de limpeza de disco), mas ele tem muitas dependências nas DLLs que não estão presentes no servidor Core / Hyper-V.

Então, eu apaguei o diretório manualmente.

Primeiro, removi todos os pontos de junção e links simbólicos. Para fazer isso eu usei junction.exe da SysInternals. Copie o exe em um diretório em seu caminho. Eu corri para obter uma lista de todas as junções:

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

Eu abri um PowerShell:

start powershell.exe

e executou o seguinte script para encontrar as linhas relevantes e executar o junction.exe novamente:

 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"
     }
 }

Isso removeu todos os pontos de junção e o único link simbólico no meu sistema.

de volta em cmd.exe Agora eu executei três comandos para limpar as permissões e excluir todos os arquivos:

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

No meu teste, instalei um novo servidor Hyper-V 2012, depois atualizei para o 2012 R2, o Windows.old desapareceu e o sistema está funcionando bem com todos os antigos destinos de junção intactos.

    
por 13.10.2013 / 00:26
4

Eu usei a resposta de Peter H e confirmei que funciona, mas precisei fazer isso em vários servidores, então modifiquei o código dele em um script PowerShell que pode ser executado localmente ou por meio do PS Remoting de outra máquina. Este é o arquivo .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 /F C:\windows.old /R /D Y
 echo y | cacls C:\windows.old /T /G Everyone:F

 rm C:\windows.old -recurse -force
 rm "$env:temp\juncts.txt" -force
    
por 26.01.2014 / 09:59