|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Помогите наваять скрипт? Поиск строки в файле. |
|
VBS/WSH/JS - [решено] Помогите наваять скрипт? Поиск строки в файле.
|
Старожил Сообщения: 161 |
Есть файл dns.txt вида
c1601.f1_r1_1.m IN A 10.30.4.61 c1601.f1_r1_1_s1.m IN A 10.30.4.61 c1601.kf1_r1_1_s0.m IN A 10.30.4.78 c2811.f1-r1_1.m IN A 10.30.40.1 c2811.f1-r1_1_vl2.m IN A 10.30.40.1 c2811.f1-r1_1_s0-0-0_1.m IN A 10.30.40.10 c7206.f2-r206_1_vl15.m IN A 10.30.40.101 zy782.hd_f2-r1_1_dsl.m IN A 10.30.40.102 zy791.h3_f1-r1_1.m IN A 10.30.40.105 zy791.h3_f1-r1_1_lan.m IN A 10.30.40.105 порядка 6000 строк. Нужно в нем в цикле смотреть строку 10.30.0-255.0-255 и если ее нет, то добавлять в конец файла сформированную строку "ИмяУстройства IN A ИПАдрес", строку я знаю как формировать. Прошу помощи. И еще самый главный вопрос - когда я формирую это файл - он генерится около 12 часов (пинг по IP с таймаутом 1 сек, если есть пинг, то опрос по SNMP), так вот - не увеличит ли поиск такого каждого IP в этом файле время работы скрипта в геометрической прогрессии? Сумбурно написал... |
|
Отправлено: 12:37, 04-03-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата glukin:
![]() Цитата glukin:
Windows Management Framework (Windows PowerShell 2.0, WinRM 2.0, and BITS 4.0) Download Update for Windows Server 2003 (KB968930) from Official Microsoft Download Center Цитата glukin:
|
|||
Отправлено: 11:40, 05-03-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 161
|
Профиль | Отправить PM | Цитировать Спасибо! Пока попробую асинхронный опрос, по результату отпишусь.
|
Отправлено: 12:26, 05-03-2017 | #12 |
Старожил Сообщения: 161
|
Профиль | Отправить PM | Цитировать del
|
Последний раз редактировалось glukin, 05-03-2017 в 13:04. Причина: Стоп. Все понял. Отправлено: 12:44, 05-03-2017 | #13 |
Старожил Сообщения: 161
|
Профиль | Отправить PM | Цитировать Iska, Все отлично! Прирост в скорости примерно в 20 раз. То, что нужно!!
Проблема обнаружилась другая - почему-то не все устройства отдают свой SNMP sysName при абсолютно одинаковых настройках, но это вопрос, наверное, не сюда. Буду допиливать дальше... |
Отправлено: 15:37, 06-03-2017 | #14 |
Старожил Сообщения: 161
|
Профиль | Отправить PM | Цитировать Поясните, пожалуйста, почему не работает конструкция вида:
'============================================================================= ' Процедура асинхронной обработки экземпляра объекта (замечание: в данном конкретном случае ' будет возвращаться единственный объект, однако, в большинстве случаев запросы ' возвращают множество объектов) Sub Sink_OnObjectReady(objWbemObject, objWbemAsyncContext) Dim strComputer strComputer = objWbemAsyncContext.Item("HostName") If Not IsNull(objWbemObject.StatusCode) Then If objWbemObject.StatusCode = 0 Then objWmiNamedValueSet.Add "AgentAddress", strComputer objWmiNamedValueSet.Add "AgentReadCommunityName", "poll" 'on error resume next Set colSystem = objWmiServices.InstancesOf("SNMP_RFC1213_MIB_system", , objWmiNamedValueSet) WSCript.Echo IsNull(objSystem) If Not IsNull(colSystem) Then For Each objSystem In colSystem If (Right(objSystem.sysName,12)="123") Then objSystem.sysName=Left(objSystem.sysName,Len(objSystem.sysName)-12) + ".m" Else objSystem.sysName=objSystem.sysName + ".m" End If NFile1.WriteLine objSystem.sysName + " IN A " + strComputer Next Else objWmiNamedValueSet.Add "AgentReadCommunityName", "public" Set colSystem = objWmiServices.InstancesOf("SNMP_RFC1213_MIB_system", , objWmiNamedValueSet) If Not IsNull(colSystem) Then For Each objSystem In colSystem If (Right(objSystem.sysName,12)="123") Then objSystem.sysName=Left(objSystem.sysName,Len(objSystem.sysName)-12) + ".m" Else objSystem.sysName=objSystem.sysName + ".m" End If NFile1.WriteLine objSystem.sysName + " IN A " + strComputer Next Else NoSNMP.WriteLine strComputer End If End If End If End If End Sub Выдаёт ошибку null на "For Each objSystem In colSystem" |
Последний раз редактировалось glukin, 07-03-2017 в 13:48. Отправлено: 13:02, 07-03-2017 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:09, 07-03-2017 | #16 |
Старожил Сообщения: 161
|
Профиль | Отправить PM | Цитировать Iska, Без изменений.
ПС: на устройствах, которые отдают SNMP sysName все работает, не работает только на тех, которые SNMP не умеют. |
Отправлено: 13:37, 07-03-2017 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Тогда детализируйте (ибо гадать не интересно) — на каком из двух:
Цитата glukin:
|
|
Отправлено: 14:12, 07-03-2017 | #18 |
Старожил Сообщения: 161
|
Профиль | Отправить PM | Цитировать Iska, На первом.
--------------------------- Windows Script Host --------------------------- Script: C:\Documents and Settings\Administrator\Desktop\ping.vbs Line: 117 Char: 5 Error: 0x80041010 Code: 80041010 Source: (null) --------------------------- OK --------------------------- ПС: Я понимаю, что при скане ИП-адресов какой-то из ИП выдает NULL, то есть или не умеет SNMP, или access denied, но почему этот NULL не обрабатывается If'ами? |
Отправлено: 14:20, 07-03-2017 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Ну, это ведь совсем не «null». Судя по описанию, Вы пытаетесь использовать несуществующий класс в указанном пространстве Wbem.
Попробуйте сделать проверку существования класса, наподобие: Option Explicit Dim strComputer Dim objSWbemLocator Dim objSWbemServicesEx Dim collSWbemObjectSet Dim objSWbemObjectEx strComputer = "." Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator") Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2") WScript.Echo ClassExists(objSWbemServicesEx, "bla-bla-bla") WScript.Echo ClassExists(objSWbemServicesEx, "Win32_Process") WScript.Echo ClassExists(objSWbemServicesEx, "CIM_OperatingSystem") WScript.Echo ClassExists(objSWbemServicesEx, "SNMP_RFC1213_MIB_system") If ClassExists(objSWbemServicesEx, "SNMP_RFC1213_MIB_system") Then Set collSWbemObjectSet = objSWbemServicesEx.InstancesOf("SNMP_RFC1213_MIB_system") For Each objSWbemObjectEx In collSWbemObjectSet '… Next Else ' … End If WScript.Quit 0 Function ClassExists(objSWbemServicesEx, strClassName) Dim objSWbemObjectEx ClassExists = False For Each objSWbemObjectEx In objSWbemServicesEx.SubclassesOf() If StrComp(objSWbemObjectEx.Path_.RelPath, strClassName, vbTextCompare) = 0 Then ClassExists = True Exit Function End If Next End Function |
Отправлено: 15:07, 07-03-2017 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск и замена строки в *.ini файле | Akriaro | Скриптовые языки администрирования Windows | 5 | 17-12-2015 13:31 | |
CMD/BAT - Поиск строки в файле | tmpnikl | Скриптовые языки администрирования Windows | 9 | 08-11-2013 21:18 | |
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox | ultrarare | Скриптовые языки администрирования Windows | 11 | 03-07-2013 14:37 | |
CMD/BAT - Поиск и изменение строки в файле. | climber89 | Скриптовые языки администрирования Windows | 2 | 31-01-2013 13:25 | |
VBS/WSH/JS - Поиск\редактирование строки в текстовом файле | pavvel | Скриптовые языки администрирования Windows | 2 | 11-04-2012 16:38 |
|