2012-06-08 3 views
13

Salut je remarque un comportement étrange avec le code suivant

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

test 
Write-Host "Last exitcode: $LASTEXITCODE" 

La sortie de c'est

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

Pourquoi $ LASTEXITCODE pas définie dans le test() fonction?

C'est une généralisation d'un problème que je vais avoir en ce moment, quand je l'appelle un .exe Win32 dans une fonction et la LASTEXITCODE de $ ne retourne pas la valeur que je me attends dans une fonction

Répondre

19

Parce que vous n'êtes pas censé définir des variables automatiques comme ça. Vous créez une variable locale et l'annulez. Supprimer la ligne $LASTEXITCODE = $null et vous obtiendrez le résultat attendu. Ou vous pouvez le faire $global:LASTEXITCODE = $null

+0

Merci, qui fait tout à fait sens. – blue18hutthutt

4

Vous attribuez une valeur à $ LASTEXITCODE dans la portée du test fonctionnel, où il est réellement défini. La dernière ligne de sortie affiche $ LASTEXITCODE comme 1, car vous avez quitté la portée du test de fonction et la valeur affectée à $ LASTEXITCODE à l'intérieur de cette portée n'a plus d'intérêt. Comme déjà mentionné, vous pouvez simplement définir la variable globalement, si vous voulez atteindre ce résultat.

0

Pas sûr que j'aime mettre LASTEXITCODE directement $ ... probablement mieux de laisser les systèmes internes le font:

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