2012-06-08 12 views
13

Ciao sto notando un comportamento strano con il seguente frammento di codice

function test 
{ 
    $LASTEXITCODE = $null 
    ping asdfs 
    Write-Host "Last exitcode: $LASTEXITCODE" 
} 

test 
Write-Host "Last exitcode: $LASTEXITCODE" 

L'uscita da questo è

Ping request could not find host asdfs. Please check the name and try again. 
Last exitcode: 
Last exitcode: 1 

Perché $ LASTEXITCODE non trova all'interno del funzione test()?

Questa è una generalizzazione di un problema che sto avendo in questo momento, quando chiamo un exe Win32 dall'interno di una funzione e il $ LASTEXITCODE non restituisce il valore mi aspetto all'interno di una funzione

risposta

19

Perché non si dovrebbe impostare variabili automatiche come quella. Stai creando una variabile locale e annullandola. Rimuovere la riga $LASTEXITCODE = $null e si otterrà il risultato previsto. Oppure puoi fare $global:LASTEXITCODE = $null

+0

Grazie, che rende completamente senso. – blue18hutthutt

4

Stai assegnando un valore a $ LASTEXITCODE nell'ambito del test funzionale, dove è effettivamente impostato. L'ultima riga di output elenca $ LASTEXITCODE come 1, perché hai lasciato l'ambito del test di funzione e il valore assegnato a $ LASTEXITCODE all'interno di tale ambito non ha più alcun interesse.

Come già sottolineato, è possibile impostare la variabile globalmente, se si desidera ottenere tale risultato.

0

Non sono sicuro che mi piace l'impostazione $ LASTEXITCODE direttamente ... probabilmente meglio lasciare che i meccanismi interni del sistema lo fanno:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging 
Problemi correlati