当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 获取 PowerShell 中最后一个命令的退出代码 [2 种方法]

作者:精品下载站 日期:2024-12-14 05:28:14 浏览:15 分类:玩电脑

获取 PowerShell 中最后一个命令的退出代码 [2 种方法]


[玩转系统] 获取 PowerShell 中最后一个命令的退出代码 [2 种方法]

我们可以使用不同的解决方案来获取PowerShell中最后一个命令的退出代码,但在此之前,有必要了解exit命令的含义。

exit 命令终止当前 PowerShell 脚本或 PowerShell 中的会话。当执行exit命令时,PowerShell会话或脚本将立即关闭,并且不会执行任何进一步的命令或语句。

使用退出命令:

$error_message= "There is an error"
if ($error_message) {
    Write-Host "An error occurred, exiting with code 1"
    Start-Sleep -Seconds 3
    exit 1
}
Write-Host "This is the end of the script"

输出 :

An error occurred, exiting with code 1

在上面的代码中,脚本检查$error_message变量是否包含任何值,然后在控制台上写入一条消息发生错误,以代码1退出并退出退出代码 1。否则,在控制台上显示消息这是脚本的结尾。当脚本此时退出时,它将以默认退出代码 0 退出。最后,脚本将等待 3 秒然后退出。

在上述情况下,执行上述脚本后$error_message变量不为空。例如,消息 发生错误,退出代码为 1 将显示在控制台上,3 秒后,脚本将终止并退出代码 1 。要查看退出代码,我们可以运行自动变量 $LASTEXITCODE(我们将在下一节中讨论)。

让我们继续使用各种方法来获取 PowerShell 中最后一个命令的退出代码。

使用自动变量 $LASTEXITCODE

要获取 PowerShell 中最后执行的命令的退出代码,请使用自动变量 $LASTEXITCODE

使用 $LASTEXITCODE 变量:

ping facebook.com 
$LASTEXITCODE

输出 :

Pinging facebook.com [157.240.227.35] with 32 bytes of data:
Reply from 157.240.227.35: bytes=32 time=64ms TTL=55
Reply from 157.240.227.35: bytes=32 time=64ms TTL=55
Reply from 157.240.227.35: bytes=32 time=65ms TTL=55
Reply from 157.240.227.35: bytes=32 time=91ms TTL=55
Ping statistics for 157.240.227.35:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 64ms, Maximum = 91ms, Average = 71ms

0

在此示例中,ping 命令测试与网络主机的连接。 PowerShell 中的 Ping 使用 ICMP 回显请求数据包向指定主机发送一系列请求数据包并等待响应数据包。 ping 命令完成后,它会设置 $LASTEXITCODE 环境变量来指示命令是成功还是失败。

在上面的示例中,ping 命令成功接收到来自 Facebook 服务器 的 ICMP 回显应答数据包,$LASTEXITCODE 变量为 0

$LASTEXITCODE 变量以 Boolean 值返回退出代码。

  • 0:命令或脚本已成功完成,没有错误。
  • 1:命令或脚本在执行过程中遇到一个或多个错误。

让我们看另一个例子来了解 $LASTEXITCODE 的工作原理。

使用 $LASTEXITCODE 变量:

ping facebok.com
if ($LASTEXITCODE -eq 0) {
    Write-Host "Ping succeeded."
} else {
    Write-Host "Ping failed."
}

输出 :

Directory: D:\U -  A\PowerShell
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         3/13/2023   9:59 PM                Uploaded
-a----         3/17/2023   8:25 PM              5 helo.txt
-a----         3/17/2023   9:15 PM            245 hi.ps1
Command succeeded

在上面的脚本文件中,pingfacebok.com命令用于测试与facebok.com服务器的连接。在 ping 命令之后,if 语句检查 $LASTEXITCODE 的值。

如果退出代码等于0,它将打印一条消息,表明Ping 成功。如果退出代码为1,它将打印带有给定退出代码的Ping failed消息。

在这里,我们可以看到 ping 命令失败,退出代码为 1,并且相应地打印了消息。

使用自动变量 $?

要检查 PowerShell 中执行的最后一个命令的退出代码的状态,请使用自动变量 $?

使用自动变量 $?:

x = 65

输出 :

x=65 : The term 'x=65' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ x=65
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (x=65:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

在这里,我们遇到了一个错误,因为我们错过了变量 x 开头的 $ 符号。 现在让我们使用下面的 $? 检查最后一个命令的退出状态:

使用自动变量 $?:

$?

输出 :

FALSE

我们可以观察到返回了False,这意味着最后一条命令没有执行成功。因此,自动变量$?有两种可能的取值,如下:

  • TRUE - 成功执行。这意味着最后一条命令执行没有错误。
  • FALSE - 执行失败。这意味着最后一个命令因错误而退出

现在,让我们对命令进行更正并检查其退出状态:

使用自动变量 $?:

$x=6
$?

输出 :

TRUE

我们现在可以观察到返回了 TRUE,显示了最后执行的命令的状态,没有任何错误。

这就是如何在 PowerShell 中获取最后一个命令的退出代码。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯