
Ich habe ein PowerShell 2.0-Skript auf einem 64-Bit-Windows Server 2008 R2 laufen, das als „Backup-Lösung“ einige Hyper-V-VHD-Dateien auf einen anderen Server kopiert.
Das Skript ruft eine Liste der zu kopierenden VHD-Dateien ab und durchläuft diese Liste, um sie mit Copy-Item zu kopieren. Es schreibt auch einige Protokollinformationen in eine Datei. Die Dateien werden auf einen anderen Server (Windows Server 2003 SP2) in ein mit NTFS komprimiertes Verzeichnis kopiert.
Eine der Dateien wird nicht kopiert. Sie ist relativ groß (ca. 68 GB). Die anderen sind 20 GB oder kleiner. Das Merkwürdige ist, dass die Datei während des Kopiervorgangs auf dem Zielserver erscheint und die generierte Protokolldatei aufgrund der unterschiedlichen Zeitangaben der Protokolldateieinträge darauf hinzuweisen scheint, dass die Datei kopiert wurde.
Ich sehe keine Fehlermeldungen in der Protokolldatei und auch im Ereignisprotokoll der beiden Computer ist nichts zu sehen.
Hier ist der Code, der das Kopieren durchführt.
Get-ChildItem $VMSource *.vhd -Recurse | foreach-object {
$time = Get-Date -format HH.mm.ss
Add-Content $logFileName "$time : File Copy ($_) started"
$fullname = $_.FullName
Add-Content $logFileName "$time : Copying $fullname to $VMDestination"
Copy-Item $fullname $VMDestination -Force -ErrorAction SilentlyContinue -ErrorVariable errors
foreach($error in $errors)
{
if ($error.Exception -ne $null)
{
Add-Content $logFileName "'tERROR COPYING FILE : $($error.Exception)"
}
}
$time = Get-Date -format HH.mm.ss
Add-Content $logFileName "$time : File Copy ($_) finished"
}
Ich kann mir nur vorstellen, dass es vielleicht ein Problem gibt, eine so große Datei in ein komprimiertes Verzeichnis zu kopieren. Irgendwelche Ideen?
Antwort1
Das Problem war das Kopieren dieser Datei im Allgemeinen. Ich habe versucht, die Datei im Explorer zu kopieren, aber nach etwa einer Stunde schlug dies fehl, mit der Fehlermeldung, dass ein Teil der Datei durch einen anderen Prozess gesperrt sei.
Ich habe das Skript schließlich so geändert, dass die Datei komprimiert wird, bevor ich sie an das Ziel verschiebe. Das Skript wird nun erfolgreich ausgeführt, dauert aber deutlich länger.
Danke für alle Antworten.
Antwort2
Sie müssen die Option -errorvariable prüfen. Wenn Sie +errors statt -errors verwenden, erhalten Sie möglicherweise zusätzliche Fehler.