我创建了一个 PowerShell 脚本,它将从 IIS 导出的 PFX 证书转换为更适合 Apache 的证书格式。该脚本使用一系列选项调用 openssl.exe 实例。它完美地工作。
我现在正在尝试处理用户友好的输出以及一些错误处理。我最初在 Invoke-Command 下运行该过程,正如我所说,它运行良好:
[string]$Command = " pkcs12 -in '$PFXFile' -nocerts -out '$key' -password pass:$importpw -passout pass:$pempw"
(Invoke-Command -ScriptBlock {param($arg)$arg|openssl.exe} -ArgumentList $Command)|Out-Null
这将从 OpenSSL 返回一个简单的成功消息(在本例中,“MAC 验证成功”)。我的目标是完全压制该信息,并用不那么简洁的东西代替它。我还没有找到一种方法来做到这一点,但我确实发现,当使用 Start-Job 运行相同的进程时:
[string]$Command = " pkcs12 -in '$PFXFile' -nocerts -out '$key' -password pass:$importpw -passout pass:$pempw"
Start-Job -ScriptBlock {param($arg)$arg|openssl.exe} -Name MakeCert -ArgumentList $Command
Get-Job|Wait-Job|Receive-Job
...出现了相同的成功消息,但现在似乎被标记为错误(红色文本):
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 MakeCert BackgroundJob Running True localhost param($arg)$arg|openssl.exe
MAC verified OK
+ CategoryInfo : NotSpecified: (MAC verified OK:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : localhost
然后我尝试将 Start-Job 的 ErrorAction 定义为“停止”,并将整个事情包装在 try/catch 中(使用 System.Exception 进行捕获)。但它给出了相同的输出。想法?