似乎我在权力hell
中有退出代码。
有很多主题关于为什么powershell在退出代码方面表现得很奇怪(对于语法错误等)。
退出代码和Parameter
属性还存在一个很大的问题。例如
使用以下代码调用脚本
Param(
[Parameter()]$a
)
exit 9999
在cmd.exe中返回退出代码 0 (例如echo %ERRORLEVEL%
),无法正确处理返回代码。
最后一个解决方法是使用Environment :: Exit:
Param(
[Parameter()]$a
)
[Environment]::Exit(9999)
现在问题是:我编写了一个包含大量Param
定义的脚本,因此需要Environment::Exit
才能运行。
该实用程序通过echo返回一个值,这是
# dummy.ps1
Param(
[Parameter()]$a
)
echo "foo 42"
[Environment]::Exit(10)
当然,我不需要退出此处,但真实世界的脚本要求在echo
指示退出代码 10 {{1}后正确退出}和ps
通过cmd
调用它返回42,一切都很好。
但问题是:我想在另一个脚本中重用此脚本,以便我可以正确使用回显值。
当我处于powershell提示符时,我想做类似的事情:
powershell -f dummy.ps1
但是环境::退出在Invoke-Expression之后关闭了我的提示,一切都消失了。
(即使我将此代码放在单独的$res = Invoke-Expression "& d:\dummy.ps1"
echo $res
文件中)
是否存在整个事情按预期工作的情况?
再说一遍:我需要ps1
和ps
的正确退出代码,因此cmd
或exit 10
会失败。由于exit(10)
的行为,没有其他退出代码比Environment :: Exit有效。
答案 0 :(得分:1)
我遇到了同样的事情 - 为了重新创建问题,请使用powershell.exe -version 2.0 -file blah.ps1执行
它是版本2.0 ...和参数。一旦你删除了[Parameter()],就会得到预期的退出代码。 参数( #[参数(ParameterSetName = “研究所”)] [字符串] $研究所 [字符串] $研究所 ) 所以,这有效 - 换掉注释行,然后你总是得到一个0的退出代码......对于有人发帖,你应该永远不要使用EXIT?伙计,我们都有不同的要求..
我想我的解决方法是不使用参数,只是这样做 - 我必须让它在各种操作系统版本上保持一致,这意味着我有一个必须在2.0上工作的最低要求。