it-swarm.com.de

Entfernen Sie windows.old ordnungsgemäß unter Hyper-V Server 2012 R2

Ich habe Hyper-V Server 2012 R2 auf einem Server mit Hyper-V Server 2012 installiert. Als ich dies tat, wurde der Standard Windows.old Ordner wurde erstellt. Ich möchte diesen Ordner jetzt sicher entfernen. Die Standardmethode, um dies mit einer vollständigen Benutzeroberfläche zu tun, wäre die Verwendung der Datenträgerbereinigung, aber natürlich habe ich diese Option auf Hyper-V Server nicht.

Gibt es in diesem Szenario eine formelle Möglichkeit, diesen Ordner zu entfernen? Ich weiß, wenn dies Server Core wäre, könnte ich die vollständige GUI einschließlich Desktop Experience installieren, aber das wäre eine Menge Unsinn, nur um einen Ordner sauber zu entfernen.

Mein Hauptgrund zu fragen, anstatt nur rmdir /s oder so, ist das Windows.old Ordner hat viele Junctions, und ich möchte dabei nichts in der Kopie des Produktionsbetriebssystems beschädigen.

22
MikeBaz - MSFT

Ich habe zuerst versucht, cleanmgr.exe (Disk Cleanup Tool) zu kopieren und auszuführen, aber es gibt zu viele Abhängigkeiten von DLLs, die in Core/Hyper-V Server nicht vorhanden sind.

Also habe ich stattdessen das Verzeichnis manuell gelöscht.

Zuerst habe ich alle Verbindungspunkte und symbolischen Links entfernt. Dazu habe ich junction.exe von SysInternals verwendet. Kopieren Sie die Exe in ein Verzeichnis in Ihrem Pfad. Ich habe es ausgeführt, um eine Liste aller Kreuzungen zu erhalten:

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

Ich habe eine PowerShell geöffnet:

start powershell.exe

und führte das folgende Skript aus, um die relevanten Zeilen zu finden und junction.exe erneut auszuführen:

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

Dadurch wurden alle Verbindungspunkte und die einzelne symbolische Verknüpfung auf meinem System entfernt.

zurück in cmd.exe habe ich jetzt drei Befehle ausgeführt, um Berechtigungen zu löschen und alle Dateien zu löschen:

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

In meinem Test habe ich einen neuen Hyper-V-Server 2012 installiert und dann auf 2012 R2 aktualisiert. Windows.old ist jetzt weg und das System läuft einwandfrei, wobei alle alten Junction-Ziele intakt sind.

23
Peter Hahndorf

Ich habe die Antwort von Peter H verwendet und bestätigt, dass sie funktioniert. Ich musste dies jedoch auf mehreren Servern tun. Deshalb habe ich seinen Code in ein Powershell-Skript geändert, das entweder lokal oder über PS-Remoting von einem anderen Computer ausgeführt werden kann. Dies ist die .ps1-Datei:

# 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
4
LikeARock47