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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Помогите наваять скрипт? Поиск строки в файле.

Старожил


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

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


Есть файл 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
Благодарности: 8087

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


Цитата glukin:
"Асинхронные запросы Wbem"
О! Вот это полезная штука, спасибо большое! Потестю на предмет скорости, если будет быстрее хотя бы раза в 2, чем сейчас »
Будет, коллега, будет. И куда быстрее, чем в два раза . Посмотрите тогда ещё и само обсуждение вот в этой теме: VBScript / WMI : Асинхронный мультипинг — Windows Script Host, HTA (VBScript, JScript) — Общение — Серый форум (именно из неё выросла тема в Коллекции). Там есть и временные оценки, и ещё кое-что, что может быть для Вас интересным.

Цитата glukin:
PowerShell не подходит, так как сервер, где будет работать скрипт - Win2003, и переехать на другой нет возможности, »
PowerShell второй версии есть и для Windows Server 2003. BITS 4.0 будет, конечно, недоступен, но остальное — вполне:
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:
Я понимаю, что с БД будет работать быстрее, и , возможно, проще, но БД я не умею от слова "вообще". »
Ну, ключевые слова — ADODB, Recordset, Connection. В принципе, там нет ничего сложного.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:40, 05-03-2017 | #11



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

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


Старожил


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

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


Спасибо! Пока попробую асинхронный опрос, по результату отпишусь.

Отправлено: 12:26, 05-03-2017 | #12


Старожил


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

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


del

Последний раз редактировалось glukin, 05-03-2017 в 13:04. Причина: Стоп. Все понял.


Отправлено: 12:44, 05-03-2017 | #13


Старожил


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

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


Iska, Все отлично! Прирост в скорости примерно в 20 раз. То, что нужно!!
Проблема обнаружилась другая - почему-то не все устройства отдают свой SNMP sysName при абсолютно одинаковых настройках, но это вопрос, наверное, не сюда.
Буду допиливать дальше...

Отправлено: 15:37, 06-03-2017 | #14


Старожил


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

Профиль | Отправить 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
Благодарности: 8087

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


glukin, используйте тэг code для оформления кода.

Цитата glukin:
почему не работает конструкция вида: … Выдаёт ошибку null на "For Each objSystem In colSystem" »
Проверяйте так:
Код: Выделить весь код
If Not colSystem Is Nothing Then

Отправлено: 13:09, 07-03-2017 | #16


Старожил


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

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


Iska, Без изменений.
ПС: на устройствах, которые отдают SNMP sysName все работает, не работает только на тех, которые SNMP не умеют.

Отправлено: 13:37, 07-03-2017 | #17


Ветеран


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

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


Тогда детализируйте (ибо гадать не интересно) — на каком из двух:
Цитата glukin:
For Each objSystem In colSystem»
происходит ошибка? Приведите точное сообщение об ошибке (можно просто нажать Ctrl-C в окне сообщения.

Отправлено: 14:12, 07-03-2017 | #18


Старожил


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

Профиль | Отправить 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
Благодарности: 8087

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход