2015-10-06 3 views
1

У меня есть этот код, чтобы удаленно убить определенный процесс на 5 серверах. Моя проблема в том, что я хочу сократить его и убить процесс на всех серверах за 1 клик. Теперь код спрашивает, уверен ли я, что я хочу убить процесс, а затем убивает процесс, а затем спрашивает, хочу ли я перейти к следующему серверу. я хотел бы просто иметь messge говоря, «процесс Убийство на всех серверах» и сделалУдаленное убийство процесса в 1 кадре

`Option Explicit 
Dim objWMIService, objProcess, colProcess 
Dim strProcessKill, item 
Dim strComputer(4) 
Dim ans, killFLag 

strComputer(0) = "server1" 
strComputer(1) = "server2" 
strComputer(2) = "server3" 
strComputer(3) = "server4" 
strComputer(4) = "server5" 

    strProcessKill = "'notepad.exe'" 



For item = 0 To 4 Step 1 

if MsgBox("Are you sure you want to kill " & strProcessKill & " on " & strCOmputer(item) & "?" , vbYesNo + vbQuestion) = vbYes then 
    killFLag = 1 
end if 


if KillFlag = 1 then 
    msgbox "KILLING PROCESS ON" & strComputer(item) 
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer(item) & "\root\cimv2") 

    Set colProcess = objWMIService.ExecQuery _ 
    ("Select * from Win32_Process Where Name = " & strProcessKill) 
     For Each objProcess in colProcess 
      objProcess.Terminate() 
     Next 
    WSCript.Echo "Just killed process " & strProcessKill & " on " & strComputer(item) 

else 

WScript.Quit 

end if 

Next`

ответ

0

Переставьте для петли вниз, так что вы не запрашиваются для каждого сервера. Что-то вроде этого должно работать

Option Explicit 
Dim objWMIService, objProcess, colProcess 
Dim strProcessKill, item 
Dim strComputer(4) 
Dim ans, killFLag 

strComputer(0) = "server1" 
strComputer(1) = "server2" 
strComputer(2) = "server3" 
strComputer(3) = "server4" 
strComputer(4) = "server5" 


    strProcessKill = "'notepad.exe'" 

if MsgBox("Are you sure you want to kill " & strProcessKill & " on all servers?" , vbYesNo + vbQuestion) = vbYes then 
    killFLag = 1 
end if 


if KillFlag = 1 then 
    msgbox "KILLING PROCESS ON ALL SERVERS" 
    For item = 0 To 4 Step 1 
     Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer(item) & "\root\cimv2") 

     Set colProcess = objWMIService.ExecQuery _ 
     ("Select * from Win32_Process Where Name = " & strProcessKill) 
      For Each objProcess in colProcess 
       objProcess.Terminate() 
      Next 

    next 
    msgBox "Done" 
else 

WScript.Quit 

end if 
+0

ТОЧНО, что мне нужно, я думал слишком тяжело. Большое спасибо за помощь!!!!!!!!!!!!!!!!!!! – Neil

+0

** ОБНОВЛЕНИЕ ** код по какой-то причине больше не работает, ничего не изменилось. когда скрипт запускается, он поднимается до окна msg «процесс убийства на всех серверах», я нажимаю ok, и скрипт, похоже, уходит, не делая ничего. Есть идеи?? – Neil

+0

, вы можете попробовать войти в текстовый файл, чтобы увидеть, что происходит, или даже просто добавить некоторое число wscript.echo в цикле for, чтобы увидеть, где заканчивается сценарий. – jjeff

Смежные вопросы