Java keytool.exe powershell包装不会压制标准错误
问题描述:
我想在Powershell中编写一些keytool包装来管理密钥库。 我现在面临的问题是,在PowerShell中,运行类似命令时:Java keytool.exe 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停止似乎使标准ouptut重定向消失。
答
我不知道我完全理解,它是如何工作的,但很多“猴子测试”后,我现在有什么我要找:
$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作为故意变化的目的,上面的代码,就是这样,发送我认为应该是标准输出的错误,并将错误发送到标准输出。
然后,我在脚本中使用逻辑来确定成功或失败。 我希望这可以帮助那里的人,我希望有人解释为什么我刚刚发现的作品。