我正在尝试使用
Powershell
检查 Docker 是否正在运行
我编写了以下 powershell 片段:
docker info
echo $?
如果 Docker 引擎未运行,则此代码片段返回 False;如果运行,则返回 True。到目前为止,一切都很好。现在我想抑制 docker info 的所有输出。我尝试过以各种方式做到这一点,例如:
(docker info) 2>&1>$null
echo $?
这会抑制所有输出,但也会更改退出变量的输出。
正确的做法是什么?
如果使用 PowerShell 5.1,请尝试以下操作:
$(
docker info
$Results = $?
) 2>&1>$null
ECHO $Results
切换到 PowerShell 7.4.1 或更高版本。
根据我的实验,PowerShell 5.1 的行为似乎与 PowerShell 7.4.1 不同(并且可能与版本 6 及更高版本不同)。
我没有 docker,但我发现以下代码在 Docker Engine 运行时产生了与描述相同的结果:
CMD /C "ECHO;Test & EXIT 0"
ECHO $?
这产生了与 Docker 引擎未运行时相同的结果。
CMD /C "ECHO;Test & EXIT 1"
ECHO $?
在 PowerShell 5.1 中,此代码具有与所描述的相同的问题,但在 PowerShell 7.4.1 中则正常(如果找到了 Docker,则替换为
0
,如果未找到,则替换为非零值。):
(CMD /C "ECHO;Test & EXIT <ExitCode>") 2>&1>$null
但这在 PowerShell 5.1 和 7.4.1 中都按预期工作
$(
CMD /C "ECHO;Test & EXIT 1"
$Results = $?
) 2>&1>$null
$Results