
У меня есть скрипт PowerShell 2.0, работающий на Windows Server 2008 R2 64bit, который копирует некоторые файлы Hyper-V .vhd на другой сервер в качестве «резервного решения».
Скрипт получает список .vhd для копирования, а затем выполняет итерации по этому списку, чтобы скопировать их с помощью Copy-Item. Он также записывает некоторую информацию журнала в файл. Файлы копируются на другой сервер (Windows Server 2003 Sp2) в каталог, сжатый с помощью сжатия NTFS.
Один из файлов не копируется. Он относительно большой ~ 68 ГБ. Остальные 20 ГБ или меньше. Странно то, что во время процесса копирования файл появляется на целевом сервере, а сгенерированный файл журнала, похоже, указывает на то, что файл скопирован из-за разницы во времени записей в файле журнала.
Я не вижу сообщений об ошибках в файле журнала и ничего в журнале событий ни на одной из машин.
Вот код, который выполняет копирование.
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"
}
Я могу только предположить, что есть какая-то проблема с копированием такого большого файла в сжатый каталог, может быть? Есть идеи?
решение1
Проблема была в копировании этого файла в целом. Я попытался скопировать файл в проводнике, но это не удалось примерно через час с ошибкой, сообщающей, что часть файла заблокирована другим процессом.
В итоге я изменил скрипт, чтобы заархивировать файл перед перемещением его в место назначения. Теперь скрипт работает успешно, хотя и занимает гораздо больше времени.
Буду рад любым ответам.
решение2
Вам нужно изучить опцию -errorvariable. Если вы используете +errors вместо -errors, вы можете получить дополнительные ошибки.