Консультация № 55165
12.09.2006, 15:06
0.00 руб.
0 4 1
Здравствуйте Уважаемые Эксперты!
Хотел написать VBScript для отслеживания подозрительных записей в реестре т.е. запись удаляю и она через несколько дней появляется снова, в этом случае я бы запустил мой скрипт бесконечным циклом с условием выхода при обнаружении раздела, но не получается.(смотрите в приложении)
Получается только в случае если существует любое значение в ключе а ведь если его нет,
т.е. если ключ реестра выглядит так: (По умолчанию) REG_SZ (значение не присвоено)- то в этом случае возвращается ошибка, но ведь раздел то есть...
Подскажите пожалуйста как можно еще обнаружить раздел или ключ с "не присвоенным значением"?
Может существует какой ни будь хитроумный способ для VBScript? В сриптах разбираюсь довольно средне.

Приложение:
Dim WshShell, retset WshShell = CreateObject("Wscript.Shell")On Error Resume Next ret = WshShell.RegRead("HKLM\SOFTWARE\Ashmanov & Partners\SpamTest")If Not ret = False Then ‘ или If Not ret = "" Then MsgBox "Раздел обнаружен!"Else MsgBox "Раздел не существует!"End If WshShell.Popup "Error # " & CStr(Err.Number) & " " & Err.Description

Обсуждение

Неизвестный
12.09.2006, 16:48
общий
это ответ
Здравствуйте, Diamond!
Сделано через WMI, потому несколько иные методы (использование 16ричной константы обязательно). И служба WMI должна быть запущена. Другие методы класса StdRegProv пожете посмотреть через утилиту wbemtest.exe (если служба WMI не отключена, при запуске этой утилиты должна запуститься сама).

Обращайтесь если что

Приложение:
Dim WshShell, reg, spathconst HKEY_LOCAL_MACHINE=&H80000002set WshShell = CreateObject("Wscript.Shell")set reg = GetObject("WinMgmts:\\.\Root\Default:StdRegProv")spath="\SOFTWARE\Ashmanov & Partners\SpamTest"If reg.EnumKey(HKEY_LOCAL_MACHINE,spath) then //Deleting key reg.DeleteKey(HKEY_LOCAL_MACHINE, spath) WScript.Echo "Found and deleted"else WScript.Echo "Not Found"end if
Неизвестный
13.09.2006, 14:02
общий
Здравствуйте, Кошелев АВ !Спасибо за то что откликнулись, использование WMI и Wbem для меня абсолютно ново...Убрал из скрипта 2 помарки (не подумайте что придираюсь - просто иначе не запустится).Скрипт вроде и ошибок не выдает но работает почему-то неправильно...Во ВСЕХ случаях сообщает: "Found and deleted" - удаления ТАК ЖЕ не происходит, удаляю раздел "ручками" но он пишет тоже самое.Может дело в OS у меня Win. XP SP2, даже не знаю что и подумать...-----------------------------------Dim reg, spathconst HKEY_LOCAL_MACHINE=&H80000002set reg = GetObject("WinMgmts:\\.\Root\Default:StdRegProv")spath="\SOFTWARE\Ashmanov & Partners\SpamTest"If reg.EnumKey(HKEY_LOCAL_MACHINE,spath) then ‘Deleting key ‘был использован символ коментария отличный от VBScript. reg.DeleteKey HKEY_LOCAL_MACHINE, spath ‘ недопустимо использование скобок в Sub процедуре. WScript.Echo "Found and deleted"else WScript.Echo "Not Found"end if
Неизвестный
13.09.2006, 14:20
общий
Пробовал так:Set reg = GetObject("winmgmts:root\default:StdRegProv")То же самое... наверное дело не в объекте - хотя я не разбираюсь.
Неизвестный
14.09.2006, 04:31
общий
<b>Правильный скрипт:</b>-----------------------------------------------------------Dim reg, spath, retConst HKEY_LOCAL_MACHINE=&H80000002Set reg = GetObject("WinMgmts:\\.\Root\Default:StdRegProv")spath = "SOFTWARE\Ashmanov & Partners\SpamTest"ret = reg.EnumValues (HKEY_LOCAL_MACHINE, spath)If ret <> 0 Then WScript.Echo ret & ": Not Found"Else WScript.Echo ret & ": Found"End If
Форма ответа