blu*_*utt 14 powershell powershell-ise powershell-2.0
嗨,我注意到以下代码片段的一些奇怪的行为
function test
{
$LASTEXITCODE = $null
ping asdfs
Write-Host "Last exitcode: $LASTEXITCODE"
}
test
Write-Host "Last exitcode: $LASTEXITCODE"
Run Code Online (Sandbox Code Playgroud)
这个输出是
Ping request could not find host asdfs. Please check the name and try again.
Last exitcode:
Last exitcode: 1
Run Code Online (Sandbox Code Playgroud)
为什么$ LASTEXITCODE没有在test()函数中设置?
这是我现在遇到的一个问题的概括,当我从一个函数中调用Win32 .exe并且$ LASTEXITCODE没有返回我在函数中期望的值时
man*_*lds 25
因为你不应该像这样设置自动变量.您正在创建一个局部变量并使其无效.删除该$LASTEXITCODE = $null
行,您将获得预期的结果.或者你可以做到$global:LASTEXITCODE = $null
扩展已经写过的内容:
该$LASTEXITCODE
变量位于范围内 - 由 powershell 设置global
。
这就是为什么当您在终端中时,$lastexitcode = 0
在调用某些内容之前进行设置,效果完全正常。在终端中,全局范围是本地范围是脚本范围。
但是,一旦您处于实际脚本或函数中,设置unqualified $LASTEXITCODE
将创建一个具有该名称的本地/脚本范围变量,该变量将“隐藏”全局变量。
所以,如果你愿意的话,规则是:
$LASTEXITCODE = ...
外部临时工作$global:LASTEXITCODE = ...
重置它。... = $global:LASTEXITCODE
以防止意外读取此变量的“隐藏”版本$LASTEXITCODE
脚本和函数。 归档时间: |
|
查看次数: |
12371 次 |
最近记录: |