2012-06-08 7 views
13

Hallo, ich bin etwas merkwürdiges Verhalten mit dem folgenden Code-Schnipsel

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

test 
Write-Host "Last exitcode: $LASTEXITCODE" 

Die Ausgabe von dieser zu bemerken ist

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

Warum $ lastexitcode nicht innerhalb der festgelegt ist test() Funktion?

Dies ist eine Verallgemeinerung eines Problems im Augenblick ich habe, wenn ich eine Win32-Exe innerhalb einer Funktion und die $ lastexitcode Rückkehr wird nicht den Wert von Ich erwarte rufen innerhalb einer Funktion

Antwort

19

Weil Sie solche automatischen Variablen nicht setzen sollten. Sie erstellen eine lokale Variable und heben sie auf. Entfernen Sie die $LASTEXITCODE = $null Zeile und Sie erhalten das erwartete Ergebnis. Oder Sie können $global:LASTEXITCODE = $null

+0

Danke, das völlig Sinn macht. – blue18hutthutt

4

Sie $ LASTEXITCODE einen Wert im Rahmen des Funktionstests zuweisen, wo es tatsächlich festgelegt ist. Die letzte Zeile der Ausgabe listet $ LASTEXITCODE als 1 auf, weil Sie den Gültigkeitsbereich des Funktionstests verlassen haben und der Wert, der $ LASTEXITCODE innerhalb dieses Bereichs zugewiesen ist, ist nicht mehr von Interesse.

Wie man bereits erwähnt hat, können Sie die Variable global setzen, wenn Sie dieses Ergebnis erreichen wollen.

0

nicht sicher, ob ich wie Einstellung $ lastexitcode direkt ... wahrscheinlich besser die Systeminterna es tun zu lassen:

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