如何在PowerShell中抑制Docker Info输出并获取正确退出状态
正确检查Docker是否运行的PowerShell实现方式
在PowerShell 5.1里,你之前遇到的问题根源在于:(docker info) 2>&1>$null这种写法会让$?的结果不再反映docker info的执行状态,而是反映重定向操作本身是否成功——不管Docker有没有运行,重定向操作都是成功的,所以$?始终返回True,自然判断失效。
下面是两种可靠的实现方式:
方法一:通过退出码判断(推荐)
直接捕获docker info的退出码,Docker正常运行时退出码为0,未运行或异常时为非0值:
# 抑制所有输出(成功流+错误流) docker info *>$null # 根据退出码判断Docker是否运行 $isDockerRunning = $LASTEXITCODE -eq 0 # 输出结果 $isDockerRunning
方法二:用Out-Null处理输出
如果习惯用管道处理输出,也可以这样写,核心还是依赖退出码:
# 将所有输出(包括错误)导向Out-Null docker info 2>&1 | Out-Null # 判断退出码是否为0 $isDockerRunning = $LASTEXITCODE -eq 0 $isDockerRunning
补充说明
$?在PowerShell中仅表示上一条命令是否产生非终止错误,当你把错误流重定向到成功流后,原本的错误被转化为普通输出,PowerShell会认为上一步操作完全成功,所以$?就失去了判断Docker状态的作用。而$LASTEXITCODE会直接记录外部命令(比如docker)的退出状态码,是判断外部命令执行结果的更可靠方式。
内容的提问来源于stack exchange,提问作者Fang
相关产品推荐
相关产品推荐

