我有以下vbscript,它在命令行中运行时工作得非常好。当用鼠标双击时,会喜欢将其与Windows GUI配合使用。使vbscript能够在两个命令行中运行,并通过双击运行
当前设置
这是当前命令执行的VBScript - 需要两个参数
- 名
- 密码
cscript fix.vbs file.ext password
这里是我的代码(fix.vbs):
Dim Arg, pfxFileName, keyFileName, cerFileName, cabFileName, keyPassword
Set Arg = WScript.Arguments
pfxFileName = Arg(0)
keyPassword = Arg(1)
keyFileName = "key.tmp"
cerFileName = "cer.tmp"
cabFileName = "cabundle.tmp"
Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
return = oShell.run("cmd /C openssl pkcs12 -in " & pfxFileName & " -nocerts -out " & keyFileName & " -passin pass:" & keyPassword & " -passout pass:" & keyPassword & " | openssl pkcs12 -in " & pfxFileName & " -clcerts -nokeys -out " & cerFileName & " -passin pass:" & keyPassword & " | openssl pkcs12 -in " & pfxFileName & " -cacerts -nokeys -out " & cabFileName & " -passin pass:" & keyPassword, 0, true)
' strip all ca's except for the last block
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Dim reCut : Set reCut = New RegExp
reCut.Global = True
reCut.Pattern = "-----BEGIN CERTIFICATE-----[\s\S]+?-----END CERTIFICATE-----"
Dim oMTS : Set oMTS = reCut.Execute(goFS.OpenTextFile(cabFileName).ReadAll())
Dim sBlock : sBlock = oMTS(oMTS.Count - 1).Value
' WScript.Echo sBlock
Sub SaveStringToFile(filename, text)
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(filename, 2)
f.Write text
f.Close
End Sub
SaveStringToFile cabFileName, sBlock
' build pfx file
return = oShell.run("cmd /C openssl pkcs12 -export -in " & cerFileName & " -inkey " & keyFileName & " -certfile " & cabFileName & " -out NEW-" & pfxFileName & " -password pass:" & keyPassword & " -passin pass:" & keyPassword, 0, true)
Dim WshShell, strCurDir
Set WshShell = CreateObject("WScript.Shell")
strCurDir = WshShell.CurrentDirectory
WScript.Echo vbNewLine & ">>> Thew NEW PFX file is located in " & strCurDir & "\" & "NEW-" & pfxFileName
Set oShell = Nothing
' remove files
Set obj = CreateObject("Scripting.FileSystemObject")
obj.DeleteFile(cerFileName)
obj.DeleteFile(keyFileName)
obj.DeleteFile(cabFileName)
需要补充
- 使上述兼容双当Windows图形用户界面点击 工作代码。
- 提示用户输入两个参数(浏览到文件)&(文件 密码)
那么你的问题是什么?检查'Arg(0)'和'Arg(1)'中是否有值;如果你不这样做,你就会被双击并提示输入值。你还希望如何从双击中获得它们? –
我想这是有道理的..现在它的写作方式是参数只能通过命令行传递。 – user3436467
你可以向他们提供双击(不提示他们)的唯一方法是将它们硬编码到脚本中,这似乎不符合你所描述的要求。建议:对于未来的问题,你应该努力实际陈述你所问的问题。这一个没有,但在线之间阅读很容易。未来的问题可能不会那么顺利,并且在有问题的问题上迅速堆积起来。 –