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

Компьютерный форум 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

 

Аватара для ferget

Разный


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

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


вот похожее
http://forum.oszone.net/showthread.php?t=208639
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:02, 28-03-2012 | #2



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

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


Старожил


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

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


O L E G, вот кстати, усовершенствованный вариант скрипта по ссылке ferget, но без WMIC:
Код: Выделить весь код
@Echo Off
:: Завершает не указанные в "белом списке" процессы
:: Anonymous, 2011
SetLocal EnableDelayedExpansion EnableExtensions

:: Файл со списком разрешённых процессов
Set WhitelistFile=%~sdp0whitelist.txt


:: Получение PID своего процесса
Set WinTitle=%Random%%Random%
Title %WinTitle%
For /F "tokens=2 skip=2 delims=," %%P In ('tasklist /FI "WINDOWTITLE eq %WinTitle%" /FO CSV') Do (Set MyPID=%%~P)
Title %~n0

:: Чтение файла со списком разрешённых процессов
If Exist "%WhitelistFile%" (
For /F "tokens=*" %%w In (%WhitelistFile%) Do (Set WhiteList=%%w:!WhiteList!)
) Else (
Set WhiteList=explorer.exe:csrss.exe:ctfmon.exe:lsass.exe:services.exe:smss.exe:svchost.exe:tasklist.exe:taskmgr.exe:winlogon.exe:wmiprvse.exe:
)

:: Получение списка процессов (без дублей)
For /F "tokens=1 skip=5 delims=," %%p In ('tasklist /FO CSV') Do (Echo :!ProcList!|Find /I ":%%~p:">nul||Set ProcList=%%~p:!ProcList!)

:: Сравнение списков
:Compare
For /F "tokens=1,* delims=:" %%C In ("!ProcList!") Do (
	If Not "%%C"=="" (
		Echo :!WhiteList!|Find /I ":%%C:">nul||Call :Kill "%%C"
		Set ProcList=%%D
		GoTo Compare
	)
)
Exit

:: Завершение процессов
:Kill
If "%~1"=="cmd.exe" (
	TaskKill /F /FI "PID ne %MyPID%" /FI "IMAGENAME eq cmd.exe"
) Else (
	TaskKill /F /IM "%~1"
)
Exit /B
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:32, 28-03-2012 | #3


Ветеран


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

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


Покажите пожалуйста оптимальный вариант "белого списка" для Windows XP.

Последний раз редактировалось sov44, 28-03-2012 в 17:35.


Отправлено: 17:18, 28-03-2012 | #4


Старожил


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

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


sov44,
Вот мой, ничего лишнего. Но помните, что набор зависит от установленных у вас служб, работающих в фоновом режиме программ, и т.д. - это сугубо персональное дело.
список

AIMP2.exe опционально
bash.exe опционально
explorer.exe
console.exe опционально
csrss.exe
ctfmon.exe
firefox.exe опционально
lsass.exe
psi-plus.exe опционально
services.exe
smss.exe
svchost.exe
tasklist.exe
taskmgr.exe
VistaDrv.exe опционально
winlogon.exe
wmiprvse.exe

Последний раз редактировалось Anonymоus, 28-03-2012 в 19:11.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:56, 28-03-2012 | #5


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

Старожил


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

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


извените ребят но мне надо что бы через VBS файл запускался а не через командную строку, перепишите плиз

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


Отправлено: 12:07, 29-03-2012 | #6


Ветеран


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

Профиль | Отправить 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")

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
'=============================================================================

Перед запуском убедитесь, что Вы сохранили все данные: поскольку Вы перечислили не все необходимые для нормальной работы процессы, а я не стал расшифровывать Ваше «и тд», результатом снятия одной из системных служб станет немедленная перезагрузка ОС.

Последний раз редактировалось Iska, 30-03-2012 в 13:05. Причина: Убрано забытое имя объекта «objSWbemObjectEx» внутри блока «With…End With»

Это сообщение посчитали полезным следующие участники:

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


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

Старожил


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

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


Проверил скрипт работает но вылает такая ошибка
сторка 28
символ 4
ошибка: Сбой при удаленном вызове процедуры
источник: SWbemOmjectEx


конечно можно фильтр ошибок поставить, но ошибка эта важная?

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


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


Ветеран


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

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


O L E G, приношу Вам свои извинения. У меня эти строки были закомментированы, поскольку я делал только вывод имени процесса для завершения.

Я поправил код в своём предыдущем посте. Пробуйте.

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


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

Старожил


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

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


Iska, Да ладно можно без извенений,вы же мне не обязаны)) я понимаю
перепроверил такая же ошибка по этому адрессу

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


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



Компьютерный форум 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




 
Переход