none
recoger excepcion en script RRS feed

  • Pregunta

  • Saludos,

    No consigo recoger la excepción en el siguiente script:

    Try {
    Copy-item -Path D:\kk -Recurse -Destination D:\BKUP -ErrorAction Stop
    }
    Catch [System.IO.IOException]{
    #En esta sección gestionamos una excepción específica
        Write-Warning "Vaya! aqui no hay playa"
    }
    Catch {
    #En esta sección gestionamos cualquier tipo de excepción
        Write-Warning "Uy! problemas"
        Write-Warning $Error[0].Exception.GetType().FullName
        $_.Exception.Message
    }
    Finally {
    #Esta sección se ejecuta siempre, haya o no una excepción
        [datetime]$ahora = Get-Date 
        Write-Output ("Fin: " + $ahora)
    }

    la primera vez que se ejecuta el script todo bien, se crea la carpeta destino y no hay excepcion. La segunda vez, salta una excepción porque la carpeta ya existe. Mi problema es no entiendo porque no pasa por Catch [System.IO.IOException]

    cuando es esa la excepción generada ¿?

    Si alguien me puede echar una mano, seguro que es una tontería o mi falta de conocimiento (soy novato en PS) pero no lo veo

    Muchas gracias,

    Paco

    lunes, 6 de abril de 2015 10:30

Respuestas

  • Hola,

    ¿Seguro que no pasa por el CATCH?

    Yo acabo de probar tu script y pasa por el catch y imprime el mensaje que has puesto como warning.

    Es mas, añadiendo en el Catch [System.IO.IOException] el mismo 

    Write-Warning $Error[0].Exception.GetType().FullName
        $_.Exception.Message

    que tienes en el catch genérico imprime perfectamente la excepción:

    ADVERTENCIA:Vaya! aqui no hay playa
    ADVERTENCIA:System.IO.IOException
    Ya existe un elemento con el nombre especificado: C:\Temp\kk\kk2.
    Fin: 04/07/2015 12:10:07

    En principio no veo ningún problema de funcionamiento en tu script.

    Un saludo.

    Diego.

    • Marcado como respuesta pacocua jueves, 9 de abril de 2015 11:26
    martes, 7 de abril de 2015 10:14

Todas las respuestas

  • Hola,

    ¿Seguro que no pasa por el CATCH?

    Yo acabo de probar tu script y pasa por el catch y imprime el mensaje que has puesto como warning.

    Es mas, añadiendo en el Catch [System.IO.IOException] el mismo 

    Write-Warning $Error[0].Exception.GetType().FullName
        $_.Exception.Message

    que tienes en el catch genérico imprime perfectamente la excepción:

    ADVERTENCIA:Vaya! aqui no hay playa
    ADVERTENCIA:System.IO.IOException
    Ya existe un elemento con el nombre especificado: C:\Temp\kk\kk2.
    Fin: 04/07/2015 12:10:07

    En principio no veo ningún problema de funcionamiento en tu script.

    Un saludo.

    Diego.

    • Marcado como respuesta pacocua jueves, 9 de abril de 2015 11:26
    martes, 7 de abril de 2015 10:14
  • Muchas gracias Diego,

    Acabo de probarlo en un W2012 R2 y funciona perfectamente.

    Quiero pensar que el problema era que lo estaba ejecutando en un W7 PRO SP1...

    Seguimos ;-)

    jueves, 9 de abril de 2015 11:27
  • Hola de nuevo,

    Únicamente por descartar que el problema sea el S.O., mis pruebas fueron también sobre un W7 PRO SP1.

    Un saludo.

    Diego Fernández

    jueves, 9 de abril de 2015 15:24