Java 使用 VBScript 提取证书元数据的 keytool 命令自动化不起作用

Automation of Java keytool command using VBScript to extract certificate metadata not working

使用 Java keytool 实用程序,我试图从两个可能的目录自动读取 JKS 文件中附加到证书的元数据,并将元数据输出到平面文件(全部来自 Windows 服务器 2012 虚拟机)。我正在使用这个命令语法:

E:\Java\jre8\bin\keytool -list -v -keystore E:\foo\foo_trusts.jks > F:\foo_trusts.txt

注意事项:手动执行此过程时,我需要在出现密码提示时按 Enter 键以完成 keytool 执行。当从 Windows 命令行执行手动方法时,总是会在 F 驱动器中产生所需的输出。

这是我尝试使用的 VBScript 代码(包括模拟回车键的代码):

Option Explicit
Dim objFSO
Dim strDirectory, WshShell

strDirectory = "E:\foo"
strDirectory2 = "E:\bar"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")

If objFSO.FolderExists(strDirectory) Then
    WshShell.Run "E:\Java\jre8\bin\keytool -list -v -keystore E:\foo\foo_trusts.jks > F:\foo_trusts.txt"
    WScript.Sleep 5000
    WshShell.SendKeys "{ENTER}"
    WScript.Sleep 30000
ElseIf objFSO.FolderExists(strDirectory2) Then
    WshShell.Run "E:\Java\jre8\bin\keytool -list -v -keystore E:\bar\bar_trusts.jks > F:\bar_trusts.txt"
    WScript.Sleep 5000
    WshShell.SendKeys "{ENTER}"
    WScript.Sleep 30000

End If

WScript.Quit

我使用的自动化方法不支持直接 运行ning VBScript,所以我使用 Windows 批处理文件作为调用 VBScript 的包装器。批处理文件的内容非常简单:

cscript "E:\certMetaExtract.vbs"

当我 运行 批处理文件时,我看到 keytool.exe window 弹出并很快消失...但没有其他任何反应。当我检查 VBScript 输出的 F 驱动器时,none 存在。

这个 VBScript 中是否缺少某些东西,或者我做错了什么,阻止了预期的执行?

我确定了解决方案。 WshScript运行 对象通常不能从任务执行中读取标准输出。但是,通过将“cmd /c”添加到我的 运行 字符串的开头,我能够在 F 驱动器中获得所需的输出。

WshShell.Run "cmd /c E:\Java\jre8\bin\keytool -list -v -keystore E:\foo\foo_trusts.jks > F:\foo_trusts.txt"