gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:31:50 25 4
gpt4 key购买 nike

我正在尝试在 Powershell 中编写一些 keytool 包装器来管理 keystore 。
我面临的问题是,在 Powershell 中,运行类似于以下内容的命令时:

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

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

问题是当 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 似乎使标准输出重定向消失。

最佳答案

我不确定我是否完全理解它是如何工作的,但经过大量的“猴子测试”,我现在有了我想要的:

$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

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

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

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

关于powershell - Java keytool.exe powershell 包装器不会抑制标准错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com