0

是否可以禁用以下命令的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'
4

1 回答 1

0

记住还要抑制stdout合并后的stderr内容。如果它不起作用,请将其包装在脚本块中并重定向整个事物的输出,如下所示:

& { .\path\to\openssl.exe $opensslCommand.Split(' ') } 2>&1 1>$null
于 2019-01-04T11:48:54.080 回答