Powershell中的'$?`是什么?

uqxowvwt  于 2022-12-23  发布在  Shell
关注(0)|答案(5)|浏览(260)

Powershell中$?的含义是什么?
编辑:TechNet answers是同义反复,没有解释"成功"或"失败"的意思。
$?
包含最后一个操作的执行状态。如果最后一个操作成功,则包含TRUE;如果失败,则包含FALSE。
我以为$?会简单地测试$LastExitCode是否为0,但我发现了一个counter example,其中$?为False,而$LastExitCode为True。

d7v8vwbk

d7v8vwbk1#

如果最后一个命令成功,则返回true,否则返回false
然而,有一些警告和不明显的行为(例如,“成功”的确切含义是什么),我强烈建议阅读this article以获得更全面的治疗。
例如,考虑调用Get-ChildItem。

PS> Get-ChildItem 

PS> $? 
    True

当调用Get-ChildItem成功时,$?将返回True
但是,如果对不存在的目录调用Get-ChildItem,则将返回错误。

PS> Get-ChildItem \Some\Directory\Which\Does\Not\Exist
    Get-ChildItem : Cannot find path 'C:\Some\Directory\Which\Does\Not\Exist' because it does not exist.

PS> $?
    False

$?将在此处返回False,因为之前的命令不成功。

6tdlim6h

6tdlim6h2#

如果最后一个命令导致错误,则$?将包含$false。如果未导致错误,则$?将包含$true。在PowerShell v1时代,这是执行错误处理的常用方法。例如,在脚本中,如果要检查文件是否存在,然后在文件不存在时打印自定义消息,则可以执行以下操作:

Get-Item -Path john -ErrorAction silentlycontinue;
if( -not $?)
{
    'could not find file.';
     exit
 }`
0s0u357o

0s0u357o3#

您还可以使用$LastExitCode参数访问最后命令退出代码。

# run some command
# ...
if ((! $?) -and $ErrorAction -eq "Stop") { exit $LastExitCode }
oug3syen

oug3syen4#

我在Windows Server 2019中遇到过,当生成标准错误时,$?可以设置为false。在我的示例中,Docker-compose通过标准错误记录警告,因此尽管以0退出,$?指示失败。

ni65a41a

ni65a41a5#

**重要提示!!!**请注意Jules Clements的回答。即使$LastExitCode返回0,$?也可能返回false。

即使请求$?也会导致其内容发生更改。

**示例:**某些命令导致$?为false。第一次写入$?=〉将返回“false”第二次写入$?=〉将返回“true”

相关问题