Hyper-V Server 2012가 설치된 서버에 Hyper-V Server 2012 R2를 설치했습니다.이 작업을 수행하면 표준 Windows.old
폴더가 만들어졌습니다. 이제 해당 폴더를 안전하게 제거하고 싶습니다. 전체 GUI로이를 수행하는 표준 방법은 디스크 정리를 사용하는 것이지만 물론 Hyper-V 서버에는 해당 옵션이 없습니다.
이 시나리오에서 해당 폴더를 제거하는 공식적인 방법이 있습니까? 이것이 Server Core라면 Desktop Experience를 포함한 전체 GUI를 설치할 수 있지만 폴더를 깨끗하게 제거하는 것만으로도 의미가 없습니다.
묻는 것의 주된 이유는 단지 rmdir /s
그와 같은 것과는 달리 Windows.old
폴더에 많은 정션이 있기 때문에 프로덕션 OS 사본에서 아무것도하지 않기를 원합니다.
답변
먼저 cleanmgr.exe (디스크 정리 도구)를 복사하여 실행하려고했지만 Core / Hyper-V Server에없는 DLL에 너무 많은 종속성이 있습니다.
대신 디렉토리를 수동으로 삭제했습니다.
먼저 모든 접합점과 심볼릭 링크를 제거했습니다. 이를 위해 SysInternals의 junction.exe 를 사용했습니다 . exe를 경로의 디렉토리에 복사하십시오. 모든 정션 목록을 얻기 위해 실행했습니다.
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 /F C:\windows.old /R /D Y
cacls C:\windows.old /T /G Everyone:F
rd /s /q C:\windows.old
테스트에서 새 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 /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