Powershell:函数中的$ LASTEXITCODE

时间:2012-06-08 05:36:08

标签: powershell powershell-v2.0 powershell-ise

您好我注意到以下代码段的一些奇怪行为

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

3 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:4)

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

正如manojlds已经指出的那样,如果你想要实现这个结果,你可以全局设置变量。

答案 2 :(得分:0)

不确定我是否喜欢直接设置$ LASTEXITCODE ...可能最好让系统内部执行此操作:

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