2012-06-08 17 views
13

嗨,我发现,这与下面的代码片段一些奇怪的行为

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

test 
Write-Host "Last exitcode: $LASTEXITCODE" 

从这个输出是

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

为什么$ LASTEXITCODE不设置内test()函数?

这是我遇到现在的问题泛化,当我调用一个Win32 .EXE从功能和$ LASTEXITCODE内没有返回,我在一个函数中期待值

回答

19

因为你不应该设置这样的自动变量。您正在创建一个局部变量并将其取消。取出$LASTEXITCODE = $null线,你会得到预期的结果。或者你也可以做$global:LASTEXITCODE = $null

+0

谢谢你,完全是有道理的。 – blue18hutthutt

4

您分配功能测试中,它实际上是设定的范围内的值$ LASTEXITCODE。 输出列出$ LASTEXITCODE的最后一行是1,因为你离开了功能测试的范围和分配到$ LASTEXITCODE里面的值该范围是任何不感兴趣了。

正如manojlds已经指出的那样,你可以只设置全局变量来,如果你想达到这种效果。

0

不知道我喜欢直接设置$ LASTEXITCODE ...可能更好地让系统内部做到这一点:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging 
相关问题