2015-03-25 5 views
0

Я нашел скрипт, который соответствует моим потребностям. Тем не менее, я хотел бы улучшить его.Как я могу обрабатывать аргументы

Это сценарий:

strSSH = "C:\Program Files (x86)\PuTTY\putty.exe" 
strSSHidentity1 = "C:\id_rsa.ppk" 
strSSHidentity2 = "C:\id_dsa.ppk" 

Select Case WScript.Arguments.Count 
    Case 0 
     WScript.Echo "No hostname provided. Aborting SSH operation." 
     WScript.Quit 
    Case Else 
     Set colArgs = WScript.Arguments 
     For i = 0 To WScript.Arguments.Count - 1 
      strHost = " " & WScript.Arguments.Item(i) 
     Next 
End Select 

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run """" & strSSH & """ """ & CleanHostname(strHost) & """ """ & "-i" & """ """ & strSSHidentity1 & """ """ & "-i" & """ """ & strSSHidentity1 & """" 
WScript.Quit 

Function CleanHostname(strHost) 
    strHost = Trim(strHost) 
    'Remove protocol if it was passed 
    If InStr(strHost, "ssh://") = 1 Then 
     strHost = Right(strHost, Len(strHost) - 6) 
    End If 
    'Remove trailing slash if present 
    If InStrRev(strHost, "/") = Len(strHost) Then 
     strHost = Left(strHost, Len(strHost) - 1) 
    End If 
    'Return cleaned hostname 
    CleanHostname = strHost 
End Function 

Я использую его, чтобы включить SSH: // гиперссылкой. Как его изменить, чтобы он принимал больше аргументов, предоставленных пользователем в командной строке, чем просто имя хоста? (-p 22) например.

Примеры требуемой мощности:

CMD:

wscript ssh.vbs ssh://[email protected] -p 22 -i my_key.ppk 

бы в конечном итоге запустить:

"C:\Program Files (x86)\PuTTY\putty.exe" myhost -i C:\id_rsa.ppk -i C:\id_dsa.ppk -p 22 -i my_key.ppk 

Спасибо!

ответ

0

Поскольку вы используете .Arguments (то есть .Arguments.Unnamed), чтобы получить список хостов, далее параметры должны передаваться через .Arguments.Named. В коде:

Option Explicit 

Dim goWAN : Set goWAN = WScript.Arguments.Named 
Dim goWAU : Set goWAU = WScript.Arguments.UnNamed 

Dim sPort : sPort = "22" 

If 0 = goWAU.Count Then 
    WScript.Echo "need at least one hostname" 
Else 
    Dim u 
    For Each u in goWAU 
     WScript.Echo "Host:", u 
    Next 
    If goWAN.Exists("p") Then sPort = goWAN("p") 
    WScript.Echo "Port:", sPort 
End If 

выход:

cscript 29256477.vbs 
need at least one hostname 

cscript 29256477.vbs pi pa po 
Host: pi 
Host: pa 
Host: po 
Port: 22 

cscript 29256477.vbs pi /p:23 
Host: pi 
Port: 23 

cscript 29256477.vbs pi /p:4711 pa po 
Host: pi 
Host: pa 
Host: po 
Port: 4711 
+0

ТНХ. Я сделал несколько более четких запросов на выходные изменения. –