Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Завершение процессов кроме, определенных

Ответить
Настройки темы
VBS/WSH/JS - Завершение процессов кроме, определенных

Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16


Конфигурация

Профиль | Отправить PM | Цитировать


Подскажите как написать скрипт,который будет закрывать все процессы кроме мною указанных.
например: которые должны работать
svchost.exe
services.exe
ctfmon.exe
explorer.exe
и тд
А все остальные закрыть!

Отправлено: 12:33, 28-03-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


O L E G, проверил, работает. Приведите код, который используете Вы.

Отправлено: 15:19, 30-03-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


Option Explicit

Dim arrProcesses
Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx
Dim objSWbemEventSource

Dim lngThisScriptProcessID


arrProcesses = Array("svchost.exe", "services.exe", "ctfmon.exe", "explorer.exe", "winlogon.exe", "csrss.exe", "lsass.exe", "smss.exe")

strComputer = "."

Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString "SeDebugPrivilege", True

Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")

lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx)

For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT * FROM Win32_Process")
With objSWbemObjectEx
If Not (IsProcessEnabled(arrProcesses, .Name) Or .ProcessID = lngThisScriptProcessID) Then
If .Terminate() = 0 Then
'WScript.Echo .Name, "Terminate"
End If
End If
End With
Next

Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process'")

Do
With objSWbemEventSource.NextEvent().TargetInstance
If Not IsProcessEnabled(arrProcesses, .Name) Then
If .Terminate() = 0 Then
'WScript.Echo .Name, "Terminate"
End If
End If
End With
Loop

Set objSWbemEventSource = Nothing
Set objSWbemObjectEx = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function IsProcessEnabled(arrProcesses(), strProcess)
Dim elem

IsProcessEnabled = False

For Each elem In arrProcesses
If UCase(strProcess) = UCase(elem) Then
IsProcessEnabled = True

Exit For
End If
Next
End Function
'=============================================================================

'=============================================================================
Function GetScriptProcessID(objSWbemServicesEx)
Dim strPath

strPath = """mshta.exe"" " & _
"""<HTML><HEAD><HTA:APPLICATION APPLICATIONNAME='GetParentPID' " & _
"WINDOWSTATE='minimize' SHOWINTASKBAR='no'</HEAD></HTML>"""

With WScript.CreateObject("WScript.Shell").Exec(strPath)
GetScriptProcessID = objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(.ProcessID) &"'").ParentProcessID
.Terminate
End With
End Function

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 15:28, 30-03-2012 | #12


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код обрамляется тэгом «code».

В появляющемся окне об ошибке нажмите «Ctrl-C», и результат копирования также вставьте из буфера обмена сюда.

Отправлено: 16:03, 30-03-2012 | #13


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
---------------------------
Windows Script Host
---------------------------
Сценарий:	C:\Documents and Settings\Admin\Рабочий стол\12.vbs
Строка:	28
Символ:	4
Ошибка:	Сбой при удаленном вызове процедуры. 
Код:	800706BE
Источник: 	SWbemObjectEx

---------------------------
ОК   
---------------------------
ошибка вылазиет не всегда,но вылазиет

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 16:15, 30-03-2012 | #14


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


O L E G, Вы действительно используете:
Код: Выделить весь код
strComputer = "."
или таки по сети работаете?

Давайте попробуем вставить ради эксперимента некоторое ожидание вслед за получением PID скрипта:
Код: Выделить весь код
lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx)
WScript.Sleep 5000

Отправлено: 16:29, 30-03-2012 | #15


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


Iska,
использую
Код: Выделить весь код
strComputer = "."
использую,работаю не по сети


пробовал
Код: Выделить весь код
lngThisScriptProcessID = GetScriptProcessID(objSWbemServicesEx)
WScript.Sleep 5000
вылазиет такая же ошибка

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 16:36, 30-03-2012 | #16



Moderator


Сообщения: 53483
Благодарности: 15510

Профиль | Отправить PM | Цитировать


O L E G, замените в двух местах фрагмент:
Код: Выделить весь код
			If .Terminate() = 0 Then
				'WScript.Echo .Name, "Terminate"
			End If
на:
Код: Выделить весь код
			WScript.Echo .Name, "Попытка завершения"
			If .Terminate() = 0 Then
				WScript.Echo .Name, "Terminate"
			End If
После какого процесса выдаст ошибку?

Отправлено: 16:43, 30-03-2012 | #17


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
---------------------------
Windows Script Host
---------------------------
Сценарий:	C:\Documents and Settings\Admin\Рабочий стол\12.vbs
Строка:	29
Символ:	4
Ошибка:	Не найден 
Код:	80041002
Источник: 	SWbemObjectEx

---------------------------
ОК   
---------------------------

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 16:49, 30-03-2012 | #18


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


O L E G, даже ни одного имени процесса не выдал? Сразу в ошибку выпал?

Добавьте-ка в arrProcesses — «System Idle Process» и «System».

Отправлено: 17:27, 30-03-2012 | #19


Аватара для O L E G

Старожил


Сообщения: 284
Благодарности: 16

Профиль | Отправить PM | Цитировать


извени ребят ,я не успел посмотреть после какого процесса ошибка выскачила но она была.конец рабочего дня был не успел,в понедельник все будет

-------
Сложность программы растет до тех пор, пока не превысит способности программиста.


Отправлено: 10:27, 31-03-2012 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Завершение процессов кроме, определенных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
.NET - Завершение не своих процессов на C# ldcount Программирование и базы данных 4 29-07-2013 14:19
CMD/BAT - Завершение процессов, не указанных в списке Anonymоus Скриптовые языки администрирования Windows 4 05-08-2011 10:33
Разное - Завершение нескольких процессов из CMD или программы antikiller_bm Microsoft Windows 2000/XP 3 24-05-2009 23:39
Заблокировать трафик, кроме определенных IP noleiemit Microsoft Windows NT/2000/2003 17 19-01-2009 21:51
Разное - Неожиданное завершение службы Запуск серверных процессов DCOM koresaram Microsoft Windows 2000/XP 3 25-07-2007 12:20




 
Переход