嗨,我注意到以下代码片段的一些奇怪行为
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
为什么在test()函数中没有设置$LASTEXITCODE?
这是我现在遇到的一个问题的概括,当我从一个函数中调用Win32.exe时,$LASTEXITCODE没有从函数中返回我期望的值
4条答案
按热度按时间1tuwyuhd1#
因为你不应该像那样设置自动变量。你创建了一个局部变量并使其无效。删除
$LASTEXITCODE = $null
行,你会得到预期的结果。或者你可以做$global:LASTEXITCODE = $null
kmpatx3s2#
您在函数测试的作用域内将值赋给$LASTEXITCODE,它实际上是在该作用域内设置的。输出的最后一行将$LASTEXITCODE列为1,因为您离开了函数测试的作用域,并且在该作用域内赋给$LASTEXITCODE的值不再有任何意义。
正如manojlds已经指出的,如果你想获得这样的结果,你可以全局地设置变量。
xfb7svmp3#
我不确定是否喜欢直接设置$LASTEXITCODE......最好让系统内部来设置:
cwxwcias4#
扩展:扩展已经写过的东西:
$LASTEXITCODE
变量存在于global
作用域中,由powershell设置。这就是为什么,当你 * 在终端中 *,在调用某个东西之前设置
$lastexitcode = 0
,工作的很好,在终端中全局作用域是本地作用域是脚本作用域。但是,一旦您在实际脚本或函数中,设置 unqualified
$LASTEXITCODE
将创建一个同名的局部/脚本作用域变量,该变量将“遮蔽”全局作用域变量。规则,如果你愿意,是:
$LASTEXITCODE = ...
设置在终端上的临时工作之外$global:LASTEXITCODE = ...
进行重置。... = $global:LASTEXITCODE
读取,以防止意外读取此变量的“阴影”版本$LASTEXITCODE
* 读取 * 的脚本和函数。