Como está utilizando las constantes, el intérprete intenta precalcular el resultado y falla con una división por error cero. Tu código ni siquiera se ejecuta, por lo que no hay nada que atrapar.
Puede verificar esto usted mismo cambiando su código para usar variables, forzándolo a ser ejecutado.
try {
$divisor = 0
[int]$a = 1/$divisor
}
catch {
write 1
}
finally {
write 2
}
De Windows PowerShell en acción (p.257)
Este ejemplo utiliza 1/$ nula. La razón para hacer esto en lugar de simplemente 1/0 es porque el intérprete de PowerShell hace algo llamado plegado de expresión constante.
Examina las expresiones que solo contienen valores constantes. Cuando ve uno, evalúa esa expresión una vez en tiempo de compilación para que no tenga que perder tiempo haciéndolo de nuevo en tiempo de ejecución.
Esto significa que las expresiones imposibles, como la división por cero, son detectadas y tratadas como errores de análisis. Los errores de análisis no se pueden detectar y no se registran cuando se ingresan de manera interactiva, por lo que no se toman como como un buen ejemplo. (Si un script llama a otro guión y el guión tiene uno de estos errores, la secuencia de comandos de llamada puede cogerlo, pero el guión que se está analizando no puede.)
+1 - ¿Tiene una referencia para esto? –
Entonces ... mi mal. :) No fue RuntimeException. Acabo de copiar sobre FullyQualifiedErrorId, y eso no contiene detalles importantes para ese escenario. En cuanto a v3: no puedo encontrar ninguna referencia (todavía). Doug Finke mencionó este cálculo como ejemplo en su próximo libro, "PowerShell para desarrolladores", así que probé y me di cuenta de que en v3 realmente * puede * ser capturado. Perdón por cualquier confusión causada por el uso de terminología incorrecta ... :) – BartekB
Thx para la actualización. Si encuentra una referencia, espero que todavía la publique aquí. –