我有以下脚本,它在Virtuozzo硬件节点上执行以下操作。 :获得运行VE :提示VEID :在端口3389上为指定的VEID建立连接 :提示IP阻止 :创建IP安全策略以阻止指定的IP :重置终端会话
所以一切都按照我想要的方式工作,除了我无法弄清楚如何在一个cmd提示符中出现所有内容而不是产生新的命令提示符。如果我从exec命令中删除cmd / K,则不显示任何内容。我错过了一些简单的东西吗?
Set oShell = CreateObject ("Wscript.Shell")
getrunningvelistcmd = "cmd /K echo 'List Running VEs' & vzlist -a | find ""running"""
getrunningvelist = oShell.run (getrunningvelistcmd,1,false)
strVEID = InputBox("Enter VEID","Enter VEID")
whosethebrutecmd = "cmd /K echo 'Whose the Brute' & vzctl exec "&strVEID & " netstat -ano | find "":3389"""
whosethebrute = oShell.run (whosethebrutecmd,1,false)
strIP = InputBox("Enter IP Address to Block","Enter IP Address to Block")
blockcmd = "cmd /K echo 'Create Policy' & vzctl exec "&strVEID & " netsh ipsec static add policy description=""Block Rule"" name=""Blocked Traffic"" && echo. && echo 'Create Filter List' && vzctl exec "&strVEID & " netsh ipsec static add filterlist name=""IP Block List"" && echo. && echo 'Create Filter' && vzctl exec "&strVEID & " netsh ipsec static add filter filterlist=""IP Block List"" srcaddr="&strIP & " dstaddr=any description=""Hacker IP"" && echo. && echo 'Define Filter Action' && vzctl exec "&strVEID & " netsh ipsec static add filteraction name=""Block"" action=block && echo. && echo 'Add Rule to Filter Action' && vzctl exec "&strVEID & " netsh ipsec static add rule name=""Block Rule"" policy=""Blocked Traffic"" filterlist=""IP Block List"" filteraction=""Block"" activate=yes && echo. && echo 'Assign Policy' && vzctl exec "&strVEID & " netsh ipsec static set policy name=""Blocked Traffic"" assign=yes && echo. && echo. && echo 'Reset Sessions PRESS ENTER' && vzctl exec "&strVEID & " rwinsta rdp-tcp && echo. && echo 'You Terminated the Brute!'"
blockthebrute = oShell.run (blockcmd,1,false)
set oShell = Nothing
WScript.Quit(0)
答案 0 :(得分:0)
解决问题的“以编程方式正确的方法”是编写.hta GUI。但是如果你愿意使用cscript来运行你的脚本,那么你可以获得一个可接受的用户界面而不需要太多工作。由于我没有你的* ware,这个POC脚本:
'bstep00.vbs - keep-windows-script-in-same-command-window
Option Explicit
Dim oWSH : Set oWSH = CreateObject( "WScript.Shell" )
Dim sCmd, oEx, sFN, iRet
sCmd = "fkdir.bat"
Set oEx = oWSH.Exec( sCmd )
If Not oEx.StdOut.AtEndOfStream Then
WScript.Echo oEx.StdOut.ReadAll()
WScript.StdOut.Write "file to type: "
sFN = WScript.StdIn.ReadLine()
sCmd = "fktype.bat " & sFN
Set oEx = oWSH.Exec( sCmd )
If Not oEx.StdOut.AtEndOfStream Then
WScript.Echo oEx.StdOut.ReadAll()
Else
WScript.Echo "(1) oEx.StdOut.AtEndOfStream"
End If
Else
WScript.Echo "(0) oEx.StdOut.AtEndOfStream"
End If
WScript.Echo "Done."
使用dir
(获取/显示信息)和type
(根据信息使用用户输入)来演示组件:.Exec和.bat文件(如
fktype.bat:
@echo off
type %1
)。使用.bat(或.cmd)文件解决了2个问题:“复杂命令行”和“%comspec%starting”,因此不要试图通过在sCmd中添加更多文本来避免它们。
示例会话的输出:
cscript bstep00.vbs
07.10.2011 13:48 29 fkdir.bat
07.10.2011 14:01 20 fktype.bat
file to type: fkdir.bat
@echo off
dir | find "bat"
Done.