PDA

Показать полную графическую версию : [решено] Создание файлов на основе данных из AD домена


Falcon99
12-12-2018, 08:42
День добрый! Опять с просьбой к сообществу.
Для анализа логов прокси сервера поставили LightSquid (http://lightsquid.sourceforge.net/). Для вывода информации в человеческом виде необходимо наличие двух файлов вида:
realname.cfg:
ip-адрес_компьютера ФИО_пользователя (либо, если не известно, то "Имя_компьютера")
group.cfg:
ip-адрес_компьютера Группа_пользователя

Сейчас оба файла сделаны вручную, но было бы неплохо получать их автоматически. Поэтому прошу помощи в доработке логон и логофф скриптов и создании скрипта для создания данных файлов.
Сейчас используется следующий логон скрипт:
Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)

' Заносим данные в AD
' В поле Description компьютера пишем имя пользователя, и время входа
Thiscomp.put "description", "Logged on: " + ThisComp.cn + " " + CStr(Now)

ThisComp.Setinfo

'В поле Description учетки пользователя пишем имя компьютера и время входа
oUser.put "description", "Logged on: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo

wscript.quit
А логофф такой:
Dim adsinfo, ThisComp, oUser

‘ Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)

‘ Заносим данные в AD
‘ В поле description компьютера пишем имя пользователя, и время входа
Thiscomp.put "description", "Logged off: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

‘В поле description пользователя пишем имя компьютера и время входа
oUser.put "description", "Logged off: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
wsсript.quit

Насколько я понимаю, необходимо в обоих скриптах перед строчкой "ThisComp.Setinfo" добавить строку начинающуюся с "Thiscomp.put «Department»," это добавит запись в поле "Подразделение" в свойства компьютера, но не знаю как продолжить чтобы вписать туда поле подразделения пользователя вошедшего в систему. И даже не представляю как должен выглядить скрипт чтобы из AD вытащить значения и получить нужные файлы.

P.s. И еще вопрос как модифицировать логофф скрипт чтобы в описание компьютера и пользователя получалось не "Logged off: Имя компьютера/ФИО пользователя Время Дата выключения", а
"Имя компьютера/ФИО пользователя; Вошел: Время Дата; Вышел: Время Дата". Т.е. чтобы не происходило перезаписывание значения поля Description, а происходило дописывание значений.
P.p.s. Еще бы хотелось еще один скрипт, который генерировал файл вида:
"IP_компьютера; Отдел; ФИО пользователя; Время Дата входа; Время Дата выхода"
Лучше сразу в cvs файл, просто иногда возникает ситуация когда надо знать включался ли компьютер в некоторые дни или нет.

DJ Mogarych
12-12-2018, 15:47
В Powershell есть удобный командлет Get-ADUser, который вытаскивает информацию из AD.
И вообще:
Get-Command -Module ActiveDirectory
Там чего только нет.

В CSV можно экспортировать командой
Export-Csv

Falcon99
12-12-2018, 17:14
Спасибо за наводку, обязательно гляну. Возможно получиться разобраться в его работе.

P.s. Увы, скрипты будут крутиться на Windows Server 2003, там такого модуля нет, он появился только на Windows 7.

DJ Mogarych
13-12-2018, 10:37
https://ss64.com/ps/quest.html

Connect-QADService - http://wiki.powergui.org/index.php/Connect-QADService (param -Credential (Get-Credential)
https://social.technet.microsoft.com/Forums/en-US/672c02d5-1e57-44e5-b96c-88de05d8839d/powershell-activedirectory-module-for-2003-server?forum=winserverpowershell

Falcon99
14-12-2018, 08:29
Попробую, спасибо. О таком модуле информации не слышал. Теперь что попробовать.

Falcon99
14-12-2018, 12:07
Логон и логофф скрипты поправил. Теперь заноситься то что надо.
Логон:
Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
' Заносим данные в AD
' В поле Description компьютера пишем имя пользователя, и время входа
Thiscomp.put "description", oUser.cn + " ; Вошел в: " + CStr(Now)
Thiscomp.put "department", oUser.department
ThisComp.Setinfo

'В поле Description учетки пользователя пишем имя компьютера и время входа
oUser.put "description", ThisComp.cn + " ; Включил в: " + CStr(Now)
oUser.Setinfo

wscript.quitЛогофф:
Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
' Заносим данные в AD
' В поле Description компьютера пишем имя пользователя, и время входа
Thiscomp.put "description", Thiscomp.description + " ; Вышел в: " + CStr(Now)
ThisComp.Setinfo

'В поле Description учетки пользователя пишем имя компьютера и время входа
oUser.put "description", oUser.description + " ; Выключил в: " + CStr(Now)
oUser.Setinfo

wscript.quitРазбираюсь дальше.

Falcon99
19-12-2018, 17:44
В принципе стало получаться, но нужна помощь по двум вопросам.
Для получения списка из Ip адреса компьютера и ФИО пользователя сделал такой скрипт:
Add-pssnapin Quest.ActiveRoles.ADManagement #подключаем оснастку для работы с AD
cls #очищаем экран
$realname = "c:\scripts\realname.cfg" #задаем путь к файлу
$isfile = Test-Path $realname #проверяем наличие файла
if($isfile -eq "True") {Remove-Item $realname} #если есть, удаляем его
#подключаемся к домену и получаем списко файлов
get-QADComputer | foreach {`
$ipname=$NULL #очищаем переменную для IP адреса компьютера
$string=$NULL
$compname=$_.Name #получаем имя компьютера
$description=$_.description
#if ($description) {$ipname=[Net.DNS]::GetHostEntry($compname).addressList[0].IPAddressToString}
$ipname=[Net.DNS]::GetHostEntry($compname).addressList[0].IPAddressToString #по названию компьютера ищем в DNS'е его IP адрес
if ($ipname){$string=$ipname+" "+$description} #если IP адрес получен, то формируем запись для файла
if ($string){$string >>$realname}} #если есть что, то пишем в файлНо если для компьютера отсутствует ip адрес, то появляется надпись:
Исключение при вызове "GetHostEntry" с "1" аргументами: "Этот хост неизвестен"
C:\Scripts\Ip_comp_description.ps1:12 знак:32
+ $ipname=[Net.DNS]::GetHostEntry <<<< ($compname).addressList[0].IPAddressToString
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodExceptionКак это убрать. или может есть другой вариант для скрипта?
Второй вопрос: в description у меня пишется "ФИО ; Login: Date Time ; Logoff: Date Time". Как отсечь и писать в файл только то что до первой ";"?

P.s. Раньше в описание компьютера писалось на русском языке ("Вошел:", "Вышел:"), но почему-то с одних компьютеров записывалось в правильной кодировке, а с других в другой, из-за чего на части компьютеров описание было нечитаемое.

Falcon99
21-12-2018, 16:46
Еще раз спасибо DJ Mogarych, за ссылки, взяв за основую и используя информацию из других источников, доработал скрипты до нужного уровня. Поэтому тему закрываю.

MiceRus
26-04-2019, 08:15
А объясните, что я делаю не так с этими скриптами?
Ни на сервере ни на винде не работают.
Пишут, что нет таких команд в принципе.
Надо что-то дополнительное ставить ?
R:\>Dim adsinfo, ThisComp, oUser
"Dim" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
R:\>Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
"adsinfo.ComputerName)" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
R:\>Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
"adsinfo.ComputerName)" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Iska
26-04-2019, 10:27
Пишут, что нет таких команд в принципе.
Надо что-то дополнительное ставить ? »
Надо сохранить вышеприведённый код в файл с кодировкой ANSI/1251 с расширением .vbs.




© OSzone.net 2001-2012