es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Powershell Compress-Archive System.OutOfMemoryException Powershell Compress-Archive System.OutOfMemoryException

Estoy intentando comprimir un archivo .bak después de su creación (el tamaño del archivo sin comprimir es de 550 MB) con el siguiente comando:

Compress-Archive -Path “F:\backupfolder\mydatabase.bak” -CompressionLevel optimal -DestinationPath “F:\backupfolder\mydatabase.bak.zip”

y obtengo este error:

$destStream.Write($buffer, 0, $numberOfBytesRead)

FullyQualifiedErrorId : OutOfMemoryException

El archivo es solo uno y está por debajo del límite de 2 GB, ¿qué estoy haciendo mal?

El código es el siguiente:

        $datetime = (Get-Date -Format "yyyy.MM.dd.hhmmss")
        $databasename = "mydatabase"
        $path = "F:\backupfolder\$databasename-$datetime.bak"
        $pathzip = "F:\backupfolder\"+$databasename+"-"+$datetime+".bak.zip"

    try { 
        Backup-SqlDatabase -ServerInstance "myserver" -Database "mydatabase" -BackupFile "F:\backupfolder\mydatabase-$datetime.bak"       
        try {
            Compress-Archive -Path "F:\backupfolder\mydatabase-$datetime.bak" -DestinationPath "F:\backupfolder\mydatabase-$datetime.bak.zip"
        } 
        catch {
            Write-Host "Ocurrió un error:"
            Write-Host $_.ScriptStackTrace
        }
        #esto es para eliminar el archivo sin comprimir después de la compresión
        #if(Test-Path $path -PathType Leaf){
            #  Remove-Item $path
        #}
     }
    catch {
      Write-Host "Ocurrió un error:"
      Write-Host $_.ScriptStackTrace
    }

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error “FullyQualifiedErrorId : OutOfMemoryException” indica que el proceso de compresión se queda sin memoria. Esto probablemente se debe al tamaño del archivo de 550MB y al hecho de que se está comprimiendo con el nivel de compresión “óptimo”, lo cual puede requerir una cantidad significativa de memoria.

    Para resolver este problema, puedes intentar reducir el nivel de compresión a “más rápido” o “sin compresión” utilizando el parámetro -CompressionLevel. Por ejemplo:

    Compress-Archive -Path "F:\backupfolder\mydatabase.bak" -CompressionLevel fastest -DestinationPath "F:\backupfolder\mydatabase.bak.zip"
    

    También puedes intentar aumentar la memoria disponible para PowerShell utilizando el parámetro -MemoryLimit. Por ejemplo:

    Compress-Archive -Path "F:\backupfolder\mydatabase.bak" -CompressionLevel optimal -DestinationPath "F:\backupfolder\mydatabase.bak.zip" -MemoryLimit 2GB
    

    Esto asignará hasta 2GB de memoria al proceso de compresión, lo cual puede ser suficiente para comprimir el archivo correctamente.

    Si ninguna de estas soluciones funciona, es posible que necesites considerar el uso de una herramienta de compresión diferente que pueda manejar archivos más grandes o asignar más memoria a tu sistema.

Comments are closed.