Держите Windows Script в одном командном окне - PullRequest
0 голосов
/ 07 октября 2011

У меня есть следующий скрипт, который выполняет следующие действия на аппаратном узле Virtuozzo.: Получить работающие виртуальные среды: запросить VEID: получить установленные соединения через порт 3389 для указанного VEID: запросить блокировку IP: создать политику безопасности IP для блокировки указанного IP: сбросить сеансы терминала

Так что все работает так, как я хочуза исключением того, что я не могу понять, как все происходит в одной командной строке, а не порождает новые командные строки.Если я удаляю cmd / K из команд exec, тогда ничего не отображается.Я скучаю по чему-то простому?

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 голосов
/ 07 октября 2011

«Программно правильным способом» решения вашей проблемы является написание графического интерфейса .hta. Но если вы хотите использовать cscript для запуска своего скрипта, вы можете получить приемлемый интерфейс без особой работы. Поскольку у меня нет вашей * посуды, этот сценарий 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%», поэтому не поддавайтесь искушению избежать их, добавив больше текста в 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...