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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Создание файлов на основе данных из AD домена

Аватара для Falcon99

Пользователь


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

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


День добрый! Опять с просьбой к сообществу.
Для анализа логов прокси сервера поставили LightSquid. Для вывода информации в человеческом виде необходимо наличие двух файлов вида:
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 файл, просто иногда возникает ситуация когда надо знать включался ли компьютер в некоторые дни или нет.

Отправлено: 08:42, 12-12-2018

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:47, 12-12-2018 | #2



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

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


Аватара для Falcon99

Пользователь


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

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


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

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

Отправлено: 17:14, 12-12-2018 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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...rverpowershell

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:37, 13-12-2018 | #4


Аватара для Falcon99

Пользователь


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

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


Попробую, спасибо. О таком модуле информации не слышал. Теперь что попробовать.

Отправлено: 08:29, 14-12-2018 | #5


Аватара для Falcon99

Пользователь


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

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


Логон и логофф скрипты поправил. Теперь заноситься то что надо.
Логон:
Код: Выделить весь код
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
Разбираюсь дальше.

Отправлено: 12:07, 14-12-2018 | #6


Аватара для Falcon99

Пользователь


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

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


В принципе стало получаться, но нужна помощь по двум вопросам.
Для получения списка из 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. Раньше в описание компьютера писалось на русском языке ("Вошел:", "Вышел:"), но почему-то с одних компьютеров записывалось в правильной кодировке, а с других в другой, из-за чего на части компьютеров описание было нечитаемое.

Отправлено: 17:44, 19-12-2018 | #7


Аватара для Falcon99

Пользователь


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

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


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

Отправлено: 16:46, 21-12-2018 | #8


Новый участник


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

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


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

Отправлено: 08:15, 26-04-2019 | #9


Ветеран


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

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


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

Отправлено: 10:27, 26-04-2019 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Создание папок на основе имен файлов и перемещение файлов в эти папки mezzin Скриптовые языки администрирования Windows 4 10-12-2016 21:11
CMD/BAT - Создание третьего файла на основе двух данных blackeangel Скриптовые языки администрирования Windows 6 10-09-2016 23:04
VBS/WSH/JS - Создание группы файлов Excel на основе списка Serg2010 Скриптовые языки администрирования Windows 4 23-03-2013 00:43
Создание группы файлов Excel на основе списка Serg2010 AutoIt 1 19-03-2013 05:43
Интерфейс - Установка картинки пользователя на основе thumbnailPhoto из AD Delirium Microsoft Windows 7 2 03-04-2012 15:34




 
Переход