我的PowerShell模块有一个函数,我希望它返回非零的退出代码。但是,由于模块函数在运行Import-Module
时被加载到PowerShell控制台的上下文中,所以当该函数执行exit 1
命令时,控制台窗口就会关闭。
至少,这就是我解释当函数退出时为什么会关闭PowerShell窗口的方式。
那么,如何使PS模块函数在不关闭导入模块的控制台的情况下退出并返回非零的退出代码呢?
P.S.
我注意到Stack Overflow上有几个关于此主题的问题,但没有一个似乎涉及到这种特殊情况。
编辑 1
我想提供一些背景信息。我有一个PS模块,其中包含许多函数。其中一些函数在Azure DevOps yaml构建脚本中直接使用。后者知道如何识别非零退出代码并终止流程,因此没有必要从函数中抛出来终止流程。
然而,如果我想从控制台调用该函数,例如快速测试某些内容并且它返回非零的退出代码,则整个控制台窗口都会关闭。这非常令人烦恼。
有时会有一些解决方法。因此,可以使用以下代码而不关闭控制台窗口:
dotnet build ...
$ExitCode = $LastExitCode
DoSomethingInAnyCase()
if ($ExitCode)
{
exit $ExitCode
}
我们可以有以下版本:
try
{
dotnet build ...
}
finally
{
DoSomethingInAnyCase()
}
两个版本都能正确返回正确的退出代码,但因为第二个版本没有显式的 exit
语句,所以它不会关闭控制台。
& $Env:ComSpec /c exit n
? - Bill_Stewart