Powershell Copy-Item falha silenciosamente

Powershell Copy-Item falha silenciosamente

Eu tenho um script do PowerShell 2.0 em execução no Windows Server 2008 R2 de 64 bits que copia alguns arquivos .vhd do Hyper-V para outro servidor como uma 'solução de backup'.

O script obtém uma lista de .vhds para copiar e, em seguida, itera sobre essa lista para copiá-los usando Copy-Item. Ele também grava algumas informações de registro em um arquivo. Os arquivos são copiados para outro servidor (Windows Server 2003 Sp2) em um diretório compactado com compactação NTFS.

Um dos arquivos não foi copiado. É relativamente grande ~ 68 Gb. Os outros têm 20 Gb ou menos. O estranho é que durante o processo de cópia o arquivo aparece no servidor de destino e o arquivo de log gerado parece indicar que o arquivo foi copiado devido à diferença nos horários das entradas do arquivo de log.

Não vejo mensagens de erro no arquivo de log e nada no log de eventos de nenhuma das máquinas.

Aqui está o código que faz a cópia.

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

Só posso pensar que há algum problema em copiar um arquivo tão grande para um diretório compactado, talvez? Alguma ideia?

Responder1

O problema era a cópia desse arquivo em geral. Tentei copiar o arquivo no Explorer e ele falhou após cerca de uma hora com um erro informando que parte do arquivo estava bloqueada por outro processo.

Acabei alterando o script para compactar o arquivo antes de movê-lo para o destino. O script agora é executado com êxito, embora demore muito mais tempo.

Felicidades por qualquer resposta.

Responder2

Você precisa examinar a opção -errorvariable. Se você usar +errors em vez de -errors poderá recuperar erros adicionais.

informação relacionada