VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Аватара пользователя
pogo

VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение pogo »

Доброго времени суток!

Прощу помощи при решении следующего вопроса!

Необходим скрипт, который будет закинуть в GPO и при залогиневании пользователя будет записывать информацию в файл о том кто и откуда залогинелся.

Предположительно содержимое файла будет выглядеть следующим образом:


Цитата:



28.11.2013 12.00.01 192.168.0.10 Иванов Иван

28.11.2013 12.00.55 192.168.0.16 Петров Пётр



Собственно с этим больших проблем нет:





Код:

Код: Выделить всё

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery ("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig in IPConfigSet
	If Not IsNull(IPConfig.IPAddress) Then
		ip = IPConfig.IPAddress(0)
	End If
Next
Dim objADSystemInfo, objComp, objUser
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)
strUserName = objUser.sn + " " + objUser.GivenName
Dim objFSO, file
Const ForWriting = 2
strSourceFile = ".\Ip2Name.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set file = objFSO.OpenTextFile(strSourceFile, ForWriting, True)
file.Write Date & " " & Time & vbTab & ip & vbTab & strUserName

Подскажите пожалуйста, как сделать построчное чтение с последующей заменой подстроки. Например:

Иванов Иван в 09.00 залогинелся на компьютере с IP-адресом 192.168.0.10. В 14.00 тот же пользователь Иванов Иван, пересел за др. компьютер с IP-адресом 192.168.0.20 и начал работать за ним.

Требуется, что бы при логине пользователя, производился поиск по Фамилии\Имени и сравнивался IP-адрес, если IP-адрес отличается от того, что был в файле, то заменить его на новый.

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

Заранее спасибо всем кто откликнется и поможет реализовать данную задачу хотя бы частично.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение Iska »

pogo, выбор текстового файла — не самая удачная идея. Лучше используйте базу данных. Во-первых, не будет коллизий при добавлении данных (что рано или поздно случится при попытке одновременного доступа к единому текстовому файлу), во-вторых, выборка в базе данных по логину+дате будет делаться банальнейшим запросом.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение Iska »

pogo, какой из скриптов в этой теме вы именуете «первым», и какая строка в нём под номером 32?
Аватара пользователя
pogo

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение pogo »

Цитата pogo:



База данных мне кажется не очень хороший вариант, т.к. всё это делается, что бы в дальнейшем скормить файл lightsquid-у.
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




Причины, по которым текстовый файл не слишком подходит, я описал выше.




Цитата pogo:



А поднимать тот же mysql, для того чтобы туда писать 2 значения (IP и ФИО)
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




Разве я что-то говорил про MySQL?



Пример работы:
Работа с базами данных при помощи ADO из vbscript: самостоятельная работа - AskIt.RU
.




Цитата pogo:



мне кажется это очень излишне.
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




А мне — нет: я пробовал и то, и другое.




Цитата pogo:



К тому же потом, до из базы как то значения доставить, запихивать в файл и кормить lightsquid-у.
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




Извлекать данные из реляционной базы данных на порядок проще, нежели из csv.



P.S. Я не очень представляю себе, какой конечный формат текстового файла Вам нужен, равно как и зачем. Посему за него судить не берусь.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение Iska »

Цитата Iska:



Пример работы: Работа с базами данных при помощи ADO из vbscript: самостоятельная работа - AskIt.RU.
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




Честно говоря, что то про базы MS Access я даже не подумал.


Цитата Iska:



P.S. Я не очень представляю себе, какой конечный формат текстового файла Вам нужен, равно как и зачем. Посему за него судить не берусь.
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




Конечный формат исходного файла, я приводил в самом первом посте. Нужно это, для для удобства просмотра логов lightsquid.

Не могли бы Вы помочь в реализации, а то в vbs я не силён, а уж с базами это вообще темнота...

Вот пытаюсь сделать по той ссылке, что Вы дали. Создал файл .mdb. Создал там таблицу со столбцами DataTime | IP | UserName. Поправил код:



Код:

Код: Выделить всё

Dim cn, rs, strComputer
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0"
cn.Open "Data Source=D:\scripts\vbs\Ip2Name.mdb"
Set rs = CreateObject("ADODB.Recordset")
rs.Open "Ip2Name", cn 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery ("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then
        ip = IPConfig.IPAddress(0)
    End If
Next
Dim objADSystemInfo, objComp, objUser
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)
strUserName = objUser.sn + " " + objUser.GivenName
rs.Feilds("DataTime").Value = Date 
rs.Feilds("IP").Value = ip
rs.Feilds("UserName").Value = strUserName

но при запуске получаю ошибку:


Цитата:



Строка: 6

Символ: 1

Ошибка: Не удаётся найти указанны йпоставщик. Вероятно, он установлен неправильно.

Код: 800A0E7A

Источник: ADODB.Connection
Аватара пользователя
pogo

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение pogo »

pogo, кажется, я примерно понял Вашу мысль. Вы хотите как-то на основе логов доступа в интернет (вида локальный ip-адрес/удалённый адрес, время) и создаваемых логов входа/выхода пользователей на машины получить в итоге картинку вида кто куда ходил, так?
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение Iska »

pogo, кажется, я примерно понял Вашу мысль. Вы хотите как-то на основе логов доступа в интернет (вида локальный ip-адрес/удалённый адрес, время) и создаваемых логов входа/выхода пользователей на машины получить в итоге картинку вида кто куда ходил, так?
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение Iska »

Да, Вы меня правильно поняли.

Есть Squid в прозрачном режиме проксирования, на нём висит Lightsquid, который берёт логи Squid и делает из них отчёты о посещаемых сайтах пользователями, данный отчёты в данный момент выглядят как:


Цитата:



№ | IP | ФИО | Соединений | Байт



Поле "ФИО" берётся из отдельного файла, назовём его файл Х. Вот мне и надо сделать скрипт, чтобы пользователь при логине на какой-либо машине, писал в файл информацию - кто и с какого ip залогинелся. В дальнейшем я бы подставлял нужные мне поля в файл Х и получал бы удобочитаемые отчёты.



Правда у меня пока даже не получается в базу записать...



Код:

Код: Выделить всё

Dim cn, rs, strComputer
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Microsoft.ACE.OLEDB.12.0;Data Source=D:\scripts\vbs\Ip2Name.mdb"
cn.Open
Set rs = CreateObject("ADODB.Recordset")
rs.Open "Ip2Name", cn 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery ("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig in IPConfigSet
    If Not IsNull(IPConfig.IPAddress) Then
        ip = IPConfig.IPAddress(0)
    End If
Next
Dim objADSystemInfo, objComp, objUser
Set objADSystemInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objADSystemInfo.UserName)
strUserName = objUser.sn + " " + objUser.GivenName
rs.Feilds("DataTime").Value = Date 
rs.Feilds("IP").Value = ip
rs.Feilds("userName").Value = strUserName

Выполняю, и получаю ошибку:


Цитата:



Строка: 4

Символ: 1

Ошибка: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию

Код: 80004005

Источник: Microsoft OLE DB Provider for ODBC Drivers



И у меня такой вопрос, все ли смогут писать в данную базу? Не нужны ли всем будут MS Acceess, Access Engine или подобное?
Аватара пользователя
pogo

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение pogo »

Цитата pogo:



Т.к. проблему надо было решать "ещё вчера". Пришлось отказаться о товыряний с базой …
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)




Ну, тогда и я пока отложу этот вопрос. Как у Вас появится достаточное время — «свистите» в личку.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту)

Сообщение Iska »

Подскажите пожалуйста.

При логине на несколько серверов под Win2012, первый скрипт выпадает в ошибку:


Цитата:



Script: ....\logon.vbs

Line: 32

Char: 1

Error: Invalid procedure call or argument

Code: 800A0005

Source: Microsoft VBScript runtime error



Подскажите пожалуйста куда копать, на др серверах и рабочих станциях всё нормально.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»