Java keytool.exe powershell包装器不会抑制标准错误

时间:2017-08-10 15:17:58

标签: powershell redirect standards keytool

我正在尝试在Powershell中编写一些keytool包装器来管理密钥库。 我面临的问题是,在Powershell中,当运行类似于:

的命令时
$cmd = "& " + $keytoolexe + " -import " + $CAswitch +
" -alias "    + $alias + 
" -keystore " + $keystore + " -storepass " + $storepass + 
" -file "     + $file +
" -noprompt *>&1" 
$result = Invoke-Expression -Command $cmd

正如您所看到的,我正在将所有内容重定向到标准的ouptut,因为我想将其存储在变量中以评估命令的结果。

问题是当keytool.exe返回成功的消息时,powershell会以某种方式将其视为错误。

我试图运行块代码本身,但我没有得到任何错误。 但是,在将此代码放入函数中并使用参数-ErrorAction stop调用该函数之后,我收到了此错误。

keytool.exe : Certificate was added to keystore
At line:1 char:1
+ & "C:\Program Files\Emulex\OCM for VMware\JRE\bin\keytool.exe" -impor ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Certificate was added to keystore:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

所以不知何故,ErrorAction Stop似乎使标准的ouptut重定向消失了。

2 个答案:

答案 0 :(得分:3)

我不确定我是完全理解它是如何工作的,但经过大量的猴子测试后#34;我现在有我想要的东西:

$cmd = "& " + $keytoolexe + " -import " + $CAswitch +
" -alias "    + $alias + 
" -keystore " + $keystore + " -storepass " + $storepass + 
" -file "     + $file +
" -noprompt *>&1" 
$dummy = Invoke-Expression -Command $cmd -ErrorVariable KeyToolStdOut -OutVariable KeyToolStdErr -ErrorAction Continue

不知何故,似乎将所有内容重定向到标准的ouptut(*>& 1),然后使用变量来捕获标准输出和标准错误。

是的,我将标准的ouptut作为errorvariable故意,上面的代码就是这样,发送我认为应该是标准输出的错误,并将错误发送到标准输出。

然后我在脚本中使用逻辑来确定成功或失败。 我希望这有助于那里的人,我希望有人解释为什么我刚刚发现的东西。

答案 1 :(得分:0)

请勿在Powershell ISE中执行此操作。使用常规的Powershell。