gpt4 book ai didi

Powershell:exit 和 exit with a value 的区别

转载 作者:行者123 更新时间:2023-12-05 09:01:16 30 4
gpt4 key购买 nike

我注意到 Powershell 中有一个奇怪的行为。有两个 .ps1 文件:

ma​​in.ps1:

echo "running exit.ps1"
$myexitcode = & ".\exit.ps1" "hello" | select -Last 1
echo "Return code is $myexitcode"
echo "Exit code is $?"
echo "after running exit.ps1"

exit.ps1:

echo "processing args " $args
$script:_serverExitStatus = 9

#this is causing the program to exit completely
[System.Environment]::exit(3)

#BUT this is NOT causing the program to exit completely
#[System.Environment]::exit

使用上面的代码,进程完全退出并且输出不包含“运行 exit.ps1 之后”。但是,如果我注释 [System.Environment]::exit(3) 并取消注释 [System.Environment]::exit,则输出包含“运行 exit.ps1 后”

感觉exit总是要彻底退出。但是,[System.Environment]::exit

不是这种情况

这两个东西有什么区别,哪个是正确的?

版本:

$PSVersionTable.PSVersion

Major Minor Build Revision
----- ----- ----- --------
5 1 22000 832

谢谢。

最佳答案

详述Abdul Niyas P M's helpful answer :

在 PowerShell 中,不使用 () 引用 .NET 方法实际上不会调用该方法,它会打印其签名(重载定义),即它执行反射以向您展示在实际调用中必须传递的参数:

PS> [System.Environment]::Exit

OverloadDefinitions
-------------------
static void Exit(int exitCode)

如您所见,该方法采用无条件 int 类型的参数来指定要报告的退出代码,这意味着您必须在调用时传递一个值;如果您想发出成功信号,只需使用[System.Environment]::Exit(0)

但是,我想知道这种方法是否真的适合您的任务,PowerShell 的 exit 语句的使用是否正是您要寻找的 - 见下文。


  • 使用 PowerShell 的 exit 退出正在运行的脚本的语句。

    • 没有参数,0 被报告为退出代码;传递一个数字以明确设置退出代码(例如 exit 3)。

    • PowerShell session 中,此退出代码在 automatic $LASTEXITCODE variable 中报告,automatic $? variable - 后者是一个抽象成功指标,采用 bool 值值($true$false) ,它有效地将 0$LASTEXITCODE 值转换为 $true,并将任何非零值转换为 $false .

    • 当通过 PowerShell 的 CLI 调用脚本时(powershell.exe 对于 Windows PowerShell,pwsh 对于 PowerShell (Core) 7+):

      • 通过-File参数,退出代码也成为PowerShell进程的退出代码
      • 使用(可能隐含的)-Command 参数,它是 $? 在最后一条语句执行后转换为退出代码的值,使用 $true 变为 0$false 变为 1;因此,如果脚本调用是最后一条语句,则任何非零退出代码都有效地报告为 1;因此,保留特定的退出代码需要附加 ;退出 $LASTEXITCODE 到命令字符串。
  • 使用 [System.Environment]::exit($number) .NET 方法立即退出(终止)当前进程,从而整个 PowerShell session .

    • 因此,最好避免使用这种方法,除非你确实需要无条件终止整个过程。

关于Powershell:exit 和 exit with a value 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73584403/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com