#vbscript #keytool #wsh
#vbscript #keytool #wsh
Вопрос:
Используя утилиту Java keytool, я пытаюсь автоматизировать чтение метаданных, прикрепленных к сертификатам в файле JKS, из двух возможных каталогов и выводить метаданные в плоский файл (все с виртуальной машины Windows Server 2012). Я использую этот синтаксис команды:
E:Javajre8binkeytool -list -v -keystore E:foofoo_trusts.jks > F:foo_trusts.txt
Предостережение: при выполнении этой процедуры вручную мне нужно нажать клавишу ввода в запросе пароля, чтобы завершить выполнение keytool. Желаемый результат всегда создается на диске F при следовании ручному подходу из командной строки Windows.
Вот код VBScript, который я пытаюсь использовать (включая код для эмуляции нажатия клавиши Enter):
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:Javajre8binkeytool -list -v -keystore E:foofoo_trusts.jks > F:foo_trusts.txt"
WScript.Sleep 5000
WshShell.SendKeys "{ENTER}"
WScript.Sleep 30000
ElseIf objFSO.FolderExists(strDirectory2) Then
WshShell.Run "E:Javajre8binkeytool -list -v -keystore E:barbar_trusts.jks > F:bar_trusts.txt"
WScript.Sleep 5000
WshShell.SendKeys "{ENTER}"
WScript.Sleep 30000
End If
WScript.Quit
Метод автоматизации, который я использую, не поддерживает прямой запуск VBScript, поэтому я использую пакетный файл Windows в качестве оболочки для вызова VBScript. Содержимое пакетного файла довольно простое:
cscript "E:certMetaExtract.vbs"
Когда я запускаю командный файл, я вижу keytool.exe окно появляется и исчезает очень быстро … но больше ничего не происходит. Когда я проверяю диск F на наличие выходных данных из VBScript, их нет.
Есть ли что-то, чего мне не хватает в этом VBScript, или что-то, что я делаю неправильно, что мешает ожидаемому выполнению?
Ответ №1:
Я определил решение. Объект WshScriptRun обычно не способен считывать стандартный вывод при выполнении задачи. НО, добавив «cmd / c» в начало моих строк запуска, я смог получить желаемый результат на диске F.
WshShell.Run "cmd /c E:Javajre8binkeytool -list -v -keystore E:foofoo_trusts.jks > F:foo_trusts.txt"