16

嗨,我注意到以下代码片段有一些奇怪的行为

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 没有返回我在函数中期望的值时

4

3 回答 3

28

因为您不应该设置这样的自动变量。您正在创建一个局部变量并将其无效。删除该$LASTEXITCODE = $null行,您将获得预期的结果。或者你可以做$global:LASTEXITCODE = $null

于 2012-06-08T06:16:18.520 回答
4

您在功能测试范围内为 $LASTEXITCODE 分配一个值,它实际上是在其中设置的。输出的最后一行将 $LASTEXITCODE 列为 1,因为您离开了函数 test 的范围,并且在该范围内分配给 $LASTEXITCODE 的值不再有任何意义。

正如 manojlds 已经指出的那样,如果您想获得该结果,您可以全局设置变量。

于 2012-06-08T15:23:00.067 回答
2

不确定我是否喜欢直接设置 $LASTEXITCODE ......可能最好让系统内部来做:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging
于 2016-09-08T22:04:01.773 回答