我有以下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
你可以向他們提供雙擊(不提示他們)的唯一方法是將它們硬編碼到腳本中,這似乎不符合你所描述的要求。建議:對於未來的問題,你應該努力實際陳述你所問的問題。這一個沒有,但在線之間閱讀很容易。未來的問題可能不會那麼順利,並且在有問題的問題上迅速堆積起來。 –