|
Работаем со стартовыми командами
Большинство операционных систем при стандарной установке ставят виесте с собой кучу дополнительного, не всегда, скажем, нужного. По крайней все Винды в этом отношении просто супер. А как этим грешат программы, ужас, это просто чуть ли не модно, поставить какую нибудь фичу в автоматический запуск вместе с системой. В результате, скомплектованная система при обычном запуске грузит с собой по три десятка всяких мониторов, апдейтеров, быстрых запусков и прочей лабуды. Системный трей, если его открыть, может вполне занимать половину экрана, и только спрятанный (хитрюги) не пугает постоянно. И сколько добра еще работает, не показываясь на экране.
Каждый относится к этому по разному. Некоторым фиолетово, сколько памяти отнимают эти прилады. Можно понять, когда у тебя 4 гига озу, а из прог нужны опера и куип, тогда может и действительно фиолетово. Тогда уж с графикой или видео не приходится точно связываться. Некоторые запускают дополнительные мониторы, которые мониторят, что запускается в системе, жрут свою память и делают свои выводы. Тоже решение. Многие чистят. Я вот всегда чищу, и чищу руками, не особо нравятся мне галочки даже в msconfig. А вот на работе, когда техники много, и она то появляется, то исчезает, когда находятся пользователи, что не могут сущестовать без какой то новой програмки, есть желание чуть автоматизации добавить. В основном, правда, только в сфере сбора информации. Правда, это от характера. Если есть желание автоматом удалять ненужные проги, в конце скрипта есть примеры, как удаляются строчки из реестра или ярлыки из автозапуска.
Скрипт очень прост. Запускается в домене из процедуры регистрации, выполнятся собственно на компе пользователя. Есть два файла, со списком запрещенных программ, и со списком разрешенных. В принципе, можно конечно, обойтись и одним, разрешенными, но как сказано, жесткости не проявляем, а к каждому конкретному случаю подбираем свое решение. Берем оба файла в память, затем перебираем стартовые команды через WMI. Сравниваем по подстроке и делаем выводы - писать администратору на почту, послать ли смс, или просто записать результат в файл. Можно удалять, что не нравится, может, это кому то больше подойдет, пож-ста. Да, для почты на компе должна быть настроена учетная запись электронной почты, иначе создание объекта CDO.Message даст ошибку. Но это тоже кому как. Если не пользуетесь клиентами, а только HTTP, можно писать результаты в файл, или использовать "net send" или, да что угодно можно придумать, если есть поставленная задача.
Пример файла listprocess.txt
ctfmon.exe
avpcc.exe
\ICQ\ICQnet.exe
\ICQ\Icq.exe
Icqlite.exe
birthmil.exe
Oxford Dictionary\Dict.exe
\NetMeeting\conf.exe
BatteryLife
\Synaptics\SynTP\SynTPLpr.exe
\Synaptics\SynTP\SynTPEnh.exe
Пример файла listdelprocess.txt
FVProtect
hloader_exe.exe
antiav_exe.exe
scanregw.exe
Mstray.exe
Собственно, скрипт.
On Error Resume Next
' скрипт сделан 19.09.2002
' Денисов Виктор, Тольятти, v-vag@mail.ru.
Const HKEY_LOCAL_MACHINE = &H80000002
Dim Shell
Set Shell = WScript.CreateObject("WScript.Shell")
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim WSHNetwork
Set WSHNetwork = WScript.CreateObject("WScript.Network")
Dim sUser
Dim sComp
sUser = WSHNetwork.UserName
sComp = WSHNetwork.ComputerName
strPath = ".\log\startcom\"
strfile = ".\reg\listprocess.txt"
strdelfile = ".\reg\listdelprocess.txt"
strfilespis = strPath & sComp & "_" & sUser & "_no.txt"
strnumber = "admin@domen.ru"
Sub writeline(strfilewrite, strline)
Set objTextFile = objFSO.OpenTextFile (strfilewrite, 8, True)
objTextFile.WriteLine(strline)
objTextFile.Close
End Sub
Sub sendmail (strnumber, message)
On Error Resume Next
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "user@domen.ru"
objEmail.To = strnumber
objEmail.Subject = "SC"
objEmail.Textbody = message
objEmail.Send
On Error GoTo 0
End Sub
'------------------------------ берем в массив arrproc можные программы
If objFSO.FileExists(strfile) Then
Set objTextF = objFSO.OpenTextFile(strfile, 1)
Dim arrproc(250)
m = 0
Do Until objTextF.AtEndOfStream
arrproc(m) = objTextF.Readline
m = m + 1
Loop
objTextF.Close
Else
Call sendmail (strnumber, sComp & " not access to fileliststartup")
WScript.Quit(1)
End If
'------------------------ берем в массив arrdelproc НЕможные программы
If objFSO.FileExists(strdelfile) Then
Set objDelTextF = objFSO.OpenTextFile(strdelfile, 1)
Dim arrdelproc(250)
m = 0
Do Until objDelTextF.AtEndOfStream
arrdelproc(m) = objDelTextF.Readline
m = m + 1
Loop
objDelTextF.Close
Else
Call sendmail (strnumber, sComp & " not access to filelistdelprocess")
WScript.Quit(1)
End If
'------------------------------------------
On Error Resume Next
Set objTextFile = objFSO.OpenTextFile(strfilespis, 2, True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_StartupCommand",,48)
For Each objItem in colItems
'------------------- может, она, эта прога, запрещена ?
For n = 0 to ubound(arrdelproc)
if arrdelproc(n) = "" or arrdelproc(n) = Null then
exit for
else
if Instr(1, lcase(objItem.Command), lcase(arrdelproc(n)), 1) > 0 then
objTextFile.WriteLine Now & " ====== NO ===== эта прога вообще запрещена !!! ======= " & objItem.Command
Call sendmail (strnumber, sComp & " Эта прога !!! " & objItem.Command)
exit for
else
end if
end if
Next
'-------------------- а может нет ?
boolis = "no"
For m = 0 to ubound(arrproc)
if arrproc(m) = "" or arrproc(m) = Null then
exit for
else
if Instr(1, lcase(objItem.Command), lcase(arrproc(m)), 1) > 0 then
boolis = "yes"
exit for
else
end if
end if
Next
if boolis = "no" Then
objTextFile.WriteLine Now & " " & objItem.Command
Call sendmail (strnumber, sComp & " no startup process in spisfile " & objItem.Command)
If Instr(1, lcase(objItem.Command), "cappswk.exe", 1) > 0 then
If objFSO.FileExists("c:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка\Окно состояния Canon LBP-810.LNK") Then
objFSO.DeleteFile("c:\Documents and Settings\All Users\Главное меню\Программы\Автозагрузка\Окно состояния Canon LBP-810.LNK")
Else
End If
Else
End if
If Instr(1, lcase(objItem.Command), "caponn.exe", 1) > 0 then
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
strStringValueName = "CAPON"
oReg.DeleteValue HKEY_LOCAL_MACHINE,strKeyPath,strStringValueName
Else
End if
Else
end if
Next
objTextFile.Close
'Wscript.Echo "End work script"
|