Sto riscontrando un problema particolare con Powershell. Sto rilevando un'eccezione in un blocco catch, ma l'oggetto $ Error globale non viene popolato.
Un esempio banale, quando ciò si comportano come previsto è questo:
function Bar
{
Foo
}
function Foo
{
try
{
$Error.Clear()
throw "Error!"
}
catch
{
"Caught an error - current error count $($Error.Count)"
}
finally
{
"Cleaning up - current error count $($Error.Count)"
}
}
uscita è come ci si aspetterebbe se si chiama Bar
Caught an error - current error count 1
Cleaning up - current error count 1
Il codice che sto avendo problemi con è quasi identico, tranne che carica Foo da un modulo. Non so se questo è un bug, o semplicemente qualcosa che non capisco (dovrà controllare il mio PowerShell in Action libro!)
Se salvo Foo fuori ad un modulo - Foo.psm1
function Foo
{
try
{
$Error.Clear()
throw "Error!"
}
catch
{
"Caught an error - current error count $($Error.Count)"
}
finally
{
"Cleaning up - current error count $($Error.Count)"
}
}
Export-ModuleMember -Function Foo
Poi eseguire le seguenti
Import-Module .\Foo.psm1
$Error.Clear()
"Current error count $($Error.Count)"
Foo
"Current error count $($Error.Count)"
io alla fine con
Current error count 0
Caught an error - current error count 0
Cleaning up - current error count 0
Current error count 1
noti che Foo non vede più un tutte le modifiche apportate a $ Errore. Quindi il modulo-ificazione del codice sta cambiando il comportamento di propagazione degli errori. Qualcuno può entrare in sintonia con il ragionamento alla base di questo?
Devo notare che posso ottenere l'eccezione specifica rilevata tramite la variabile automatica $ _, ma sto cercando di ottenere una sospensione dell'intera collezione a questo punto nello stack di chiamate.
Così la mia prima riga sopra è sbagliato .. la collezione $ errore globale viene modificato, ma il modulo con ambito di raccolta $ errori non è. –