Powershell Copy-Item завершается неудачей без предупреждения

Powershell Copy-Item завершается неудачей без предупреждения

У меня есть скрипт 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, вы можете получить дополнительные ошибки.

Связанный контент