将Windows脚本保存在同一命令窗口中

时间:2011-10-06 21:27:21

标签: windows vbscript

我有以下脚本,它在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)

1 个答案:

答案 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.