是否可以禁用以下命令的stdout
和输出?stderr
req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ./private.key -out ./mycert.crt -subj "/C=DE/ST=BW/L=Karlsruhe/O=foobar/OU=foobar/CN=foobar"
该命令总是产生以下我想抑制的输出:
Generating a 2048 bit RSA private key
.............................................
.............................................................+++
........................................+++
writing new private key to './private.key'
我已经尝试使用任何变体重定向输出,2>&1
但由于以下原因,他在这种情况下不起作用:
该openssl
命令在 powershell 会话中执行,如下所示:
$opensslCommand = 'req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ./private.key -out ./mycert.crt -subj "/C=DE/ST=BW/L=Karlsruhe/O=foobar/OU=foobar/CN=foobar"'
Invoke-Expression -Command $opensslCommand
同样,PowerShell 流的重定向也不起作用。这根本不是问题,但是如果您在非交互模式下运行命令,openssl 输出将发送到stderr
而不是发送到stdout
.
Git
行为相似。但是您可以使用这些环境变量更改输出:$env:GIT_REDIRECT_STDERR = '2>&1'
解决方法
- 调用堆栈:
Module Function
--调用-->Sub Function
--调用表达式-->OpenSSL Command (with redirect *>$null)
- 问题:
发生错误是因为使用ErrorAction 'Stop'
. 如果我将其更改为默认值Continue
,则会抑制输出。
为了仍然能够进行正确的错误处理,我保留全局默认值Error Action: Stop
并手动为Invoke-Command
:
$ErrorActionPreference = 'Continue'
Invoke-Expression -Command 'openssl ... *>$null'
$ErrorActionPreference = 'Stop'