Tengo un script de PowerShell 2.0 ejecutándose en Windows Server 2008 R2 de 64 bits que copia algunos archivos .vhd de Hyper-V a otro servidor como una "solución de respaldo".
El script obtiene una lista de los .vhd para copiar y luego itera sobre esa lista para copiarlos usando Copy-Item. También escribe información de registro en un archivo. Los archivos se copian a otro servidor (Windows Server 2003 Sp2) en un directorio comprimido con compresión NTFS.
Uno de los archivos no se copia. Es relativamente grande ~ 68 Gb. Los demás son de 20 Gb o menos. Lo extraño es que durante el proceso de copia el archivo aparece en el servidor de destino y el archivo de registro generado parece indicar que el archivo se copia debido a la diferencia en los tiempos de las entradas del archivo de registro.
No veo ningún mensaje de error en el archivo de registro ni nada en el registro de eventos de ninguna de las máquinas.
Aquí está el código que hace la copia.
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"
}
Solo puedo pensar que tal vez haya algún problema al copiar un archivo tan grande en un directorio comprimido. ¿Algunas ideas?
Respuesta1
El problema fue la copia de ese archivo en general. Intenté copiar el archivo en Explorer y falló después de aproximadamente una hora con un error que indicaba que parte del archivo estaba bloqueado por otro proceso.
Terminé modificando el script para comprimir el archivo antes de moverlo al destino. El script ahora se ejecuta correctamente, aunque tarda mucho más.
Saludos por cualquier respuesta.
Respuesta2
Debe examinar la opción -errorvariable. Si utiliza +errores en lugar de -errores, puede recuperar errores adicionales.


